我确实知道这个问题已经被问过很多次了。我正在尝试使用 ANTLR 构建语法。
Predicate : LOWERCASE | Predicate VarChars ;
VarChars : LOWERCASE | UPPERCASE;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z] ;
我收到以下错误:“以下规则集是相互左递归的 [谓词]”
请告诉我这是如何解决的。如何删除我的antlr语法中的相互左递归。
完全摆脱“Predicate”的递归出现。 VarChars 本身就足以表示小写或大写。使用 + 后缀表示“一个或多个实例”:
fragment LOWERCASE : [a-z];
fragment UPPERCASE : [A-Z];
VARCHARS : LOWERCASE | UPPERCASE;
PREDICATE : LOWERCASE VARCHARS+;
应用于您的示例,这将取消“p”和“PA”作为谓词的资格,并限定“pA”。
观察如何PREDICATE
and VARCHARS
仍然是词法分析器规则(与句法规则相对),因为它们描述了词位的形成方式。因此它遵循全大写的命名约定(Antlr 不在乎,但它提高了可读性)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)