JavaCC 中的自定义 AST?

Custom AST in JavaCC?

我最近开始设计我的第一门编程语言,并且已经精通 java,我已经开始为我的语言 java 构建 AST API。我计划编译成 java 字节码,这在我已经实现的 AST 的当前部分是有效的和工作的。在遇到解析器生成器(尤其是 JavaCC)之前,我尝试了几种不同的解析方法(都失败了)。我对 JavaCC 和 EBNF 做了一些基础研究,想知道 JavaCC 在解析我的语言时是否可以支持完全自定义的 AST API(包括构造函数参数等)。在对 JavaCC 进行深入研究和 watching/reading 教程之前,我想在这里问这个问题。据我所见,JavaCC 可以支持 AST,但我不确定约束是什么。此外,我知道 JavaCC 有它自己的 AST API,但我想坚持使用我已经开发的那个,因为它可以正常工作并且很适合我的语言。

当然可以。例如你可以这样写非终结符

CommandNode whileCommand() : {
    ExpressionNode e ;
    CommandNode doPart ;
} {
    <WHILE> e = expression() <DO>
    doPart = sequence() <ENDWHILE>
    { return new WhileCommand( e, doPart ) ; }
}

构建器模式可用于将解析器与 AST 的某些细节隔离开来。