我试图模拟 EBNF 表达式
("declare" "namespace" ";")* ("declare" "variable" ";")*
我已经建立了 yacc(我使用 MPPG)语法,它似乎代表了这一点,但它与我的测试表达式不匹配。
我要匹配的测试用例是
declare variable;
来自词法分析器的令牌流是
KW_Declare
KW_Variable
Separator
语法分析表明存在“Shift/Reduce 冲突,KW_Declare 上的状态 6”。我试图用“%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 分隔符都是具有值“declare”、“naemsapce”、“variable”、“;”的标记。