JavaCC中的自定义AST?

时间:2016-05-24 15:03:26

标签: abstract-syntax-tree javacc

我最近开始设计我的第一个编程语言,并且已经熟练掌握java,我已经开始在java中为我的语言构建AST API。我计划编译java字节码,这是有用的,并且在我实现的AST的当前部分工作。在尝试解析器生成器(特别是JavaCC)之前,我尝试了几种不同的解析方法(都失败了)。我已经对JavaCC和EBNF做了一些基础研究,并且想知道JavaCC在解析我的语言时是否可以支持完全自定义的AST API(包括构造函数参数等)。在对JavaCC进行深入研究和观看/阅读教程之前,我想先问一下这个问题。从我所看到的,JavaCC可以支持AST,但我不确定约束是什么。此外,我知道JavaCC有自己的AST API,但我想坚持我已经开发的那个,因为它正在工作并且很好地匹配我的语言。

1 个答案:

答案 0 :(得分:4)

绝对。例如,你可以写这样的非终结符

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

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