我试着去建模EBNF表达帮助移动/减少冲突 - 尝试模型(XA)*(XB)*
("declare" "namespace" ";")* ("declare" "variable" ";")*
我已经建立了YACC(即时通讯使用MPPG)语法,这似乎来表示这一点,但它不符合我的测试表达式。
测试情况下,我试图匹配是
declare variable;
从词法记号流是
KW_Declare
KW_Variable
Separator
语法解析说,有一个“移进/归约冲突,国家6在KW_Declare上“。我试图用“%left PrologHeaderList PrologBodyList”来解决这个问题,但这两种解决方案都无法解决。
Program : Prolog;
Prolog : PrologHeaderList PrologBodyList;
PrologHeaderList : /*EMPTY*/
| PrologHeaderList PrologHeader;
PrologHeader : KW_Declare KW_Namespace Separator;
PrologBodyList : /*EMPTY*/
| PrologBodyList PrologBody;
PrologBody : KW_Declare KW_Variable Separator;
KW_Declare KW_Namespace KW_Variable隔板用值的所有令牌 “声明”, “naemsapce”, “可变”, “;”。
这是我最后采用的方法。我想我可以在代码中进行验证。 – Sprotty 2009-06-04 17:17:20