Tag: javacc

LL1语法中的左递归消除

我试图从以下语法提取中消除左递归 – expression := fragment ( ( + | – | * | / ) fragment )* fragment := identifier | number | ( + | – ) fragment | expression 问题是表达式可以去片段,可以去表达。 我已经尝试了很多方法来消除它,有些看起来像是在工作(在JavaCC中),但我是a)不确定它们的正确性,并且b)很确定我通过改变语法结构来破坏关联性。 我很确定我需要一个表达’,并且有 fragment := identifier | number | ( + | – ) fragment | expression 变成 fragment := identifier | number | […]

如何在语法上实现JJTree

我有一个任务是使用JavaCC为讲师提供的语言制作一个带有语义分析的自上而下的解析器。 我已经写出了生产规则,没有错误。 我完全坚持如何将JJTree用于我的代码,而我在互联网上搜索教程的时间并没有让我任何地方。 只是想知道是否有人可以抽出时间来解释如何在代码中实现JJTree? 或者,如果有一个隐藏的分步教程,那将是一个很好的帮助! 以下是我的一些生产规则,以防他们提供帮助。 提前致谢! void program() : {} { (decl())* (function())* main_prog() } void decl() #void : {} { ( var_decl() | const_decl() ) } void var_decl() #void : {} { ident_list() type() ( ident_list() type())* } void const_decl() #void : {} { identifier() type() expression() ( identifier() type() expression())* } void […]