我正在尝试生成一个小型JavaScript解析器,其中也包含一个小型项目的类型变量。Jison:减少实际上没有冲突的冲突
幸运的是,jison已经提供了一个jscore.js,我只是根据自己的需求进行了调整。加入类型后,我遇到了减少冲突。我最小化到问题这个最小JISON:
Jison:
%start SourceElements
%%
// This is up to become more complex soon
Type
: VAR
| IDENT
;
// Can be a list of statements
SourceElements
: Statement
| SourceElements Statement
;
// Either be a declaration or an expression
Statement
: VariableStatement
| ExprStatement
;
// Parses something like: MyType hello;
VariableStatement
: Type IDENT ";"
;
// Parases something like hello;
ExprStatement
: PrimaryExprNoBrace ";"
;
// Parses something like hello;
PrimaryExprNoBrace
: IDENT
;
其实这个剧本确实没有什么比分析两种说法:
VariableStatement
IDENT IDENT ";"
ExpStatement
IDENT ";"
由于这是一个最小化的极端脚本JISON,我不能简单地取代的“类型”是“IDENT”(这顺便说一句。工作)。
生成解析器引发以下矛盾:
Conflict in grammar: multiple actions possible when lookahead token is IDENT in state 8
- reduce by rule: PrimaryExprNoBrace -> IDENT
- reduce by rule: Type -> IDENT
Conflict in grammar: multiple actions possible when lookahead token is ; in state 8
- reduce by rule: PrimaryExprNoBrace -> IDENT
- reduce by rule: Type -> IDENT
States with conflicts:
State 8
Type -> IDENT . #lookaheads= IDENT ;
PrimaryExprNoBrace -> IDENT . #lookaheads= IDENT ;
有什么窍门来解决这个矛盾呢?
谢谢先进! 〜Benjamin
我必须在这里失去一些东西。我没有与GNU Bison 2.4.1发生任何冲突。 –
谢谢你的尝试。也许这是Jison的问题,我实际上正在使用它。 –
@BenjaminSchulte你解决了这个问题吗?我正在努力解决类似的问题,并找不到任何答案... – Vees