我最近开始设计我的第一个编程语言,并且已经熟练掌握java,我已经开始在java中为我的语言构建AST API。我计划编译java字节码,这是有用的,并且在我实现的AST的当前部分工作。在尝试解析器生成器(特别是JavaCC)之前,我尝试了几种不同的解析方法(都失败了)。我已经对JavaCC和EBNF做了一些基础研究,并且想知道JavaCC在解析我的语言时是否可以支持完全自定义的AST API(包括构造函数参数等)。在对JavaCC进行深入研究和观看/阅读教程之前,我想先问一下这个问题。从我所看到的,JavaCC可以支持AST,但我不确定约束是什么。此外,我知道JavaCC有自己的AST API,但我想坚持我已经开发的那个,因为它正在工作并且很好地匹配我的语言。
答案 0 :(得分:4)
绝对。例如,你可以写这样的非终结符
CommandNode whileCommand() : {
ExpressionNode e ;
CommandNode doPart ;
} {
<WHILE> e = expression() <DO>
doPart = sequence() <ENDWHILE>
{ return new WhileCommand( e, doPart ) ; }
}
构建器模式可用于将解析器与AST的某些细节隔离开来。