在我的语法中,有表达式和片段的生成规则,最初包含间接左递归.这是我从它们中删除递归后的规则.
String expression() #Expression : {String number; Token t;} { number = fragment() ( (t =number = fragment()) ) {return number;} } String fragment() #void : {String t;} { t = identifier() {return t;} | t = number() {return t;} | ( | ) fragment() | expression() }
尝试解析语法中的条件时使用这些生产规则.但是,生产规则的顺序要么具有它,所以只接受表达式.然而它应该接受像while(x <= 10)这样的东西.如果我有相反顺序的生产规则,如最初在语法中所述.当我尝试使用javac编译java文件时.我收到一个错误,告诉我identifier()是一个无法访问的语句.这是条件生成规则:
void condition() #void : {Token t;} {expression() | expression ( | | | | | | | ) expression() | identifier() }
如果有人能帮助告诉我为什么会出现这个问题,那将非常有帮助.