如果我定义了像普通对象访问这样的令牌:
[$_a-zA-Z]+[.] { return ACCESS; }
[$_a-zA-Z]+ { return ID; }
[+] { return PLUIS; }
还有 Bison 语法规则:
Accesses
: Accesses ACCESS { /*do something...*/ }
| ACCESS { /*do something...*/ }
Expression
: Accesses ID PLUS Accesses ID { /*do something...*/ }
我想在源代码中允许这样的内容:
moduleA.valueB.valueC + valueD
在示例中,如果我不将空规则放入Accesses
,则单个ID
变量 likevalueD
是非法的。但是如果我把空规则放进去,Accesses
会导致严重的S/R冲突,匹配的文本会变得奇怪。
而且,我认为复制规则Expression
不是一个好主意,例如:
Expression
: Accesses ID PLUS Accesses ID { /*do something...*/ }
| ID PLUS Accesses ID { /*do something...*/ }
| Accesses ID PLUS ID { /*do something...*/ }
| ID PLUS ID { /*do something...*/ }
我能找到其他方法来解决这个问题吗?
编辑:好的,感谢您的回答注意到我这个简单的语法没有冲突。至少你让我知道真正的问题可能隐藏在其他地方(对于编译器新手来说真是一团糟!)。