我收到一个降低/减少以下语法(excerp)冲突野牛减少/减少冲突
declaration : type list_of_id
list_of_id : ID
| list_of_id ',' ID
;
type : PATH
| SCAL
;
assignment : ID ":=" param
| ID ":=" expr
param : point relative_param
| ID relative_param
point : '(' expr ',' expr ')'
| '(' expr ':' expr ')'
relative_param : /* empty rule */
| "--" '+' param
| "--" CYCLE relative_param
| "--" param
expr : NB
| ID ``
| expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| '(' expr ')'
我看到,当输入为:FOO:=酒吧,有两种可能的派生:
- 勘定> ID “:=” 参数和param - > ID
- 勘定> ID “:=” EXPR和expr-> ID
我在语法中使用了两次ID,因为变量可以是路径类型或scal类型。 如何在不使用glr-parser选项的情况下删除此冲突?
我试图以两种possibilies分裂ID:ID_PATH和ID_SCAL并改变生产PARAM和expr来:
param : point relative_param
| ID_PATH relative_param
;
expr : NB
| ID_SCAL
| expr '+' expr
| expr '-' expr
| expr '/' expr
| '(' expr ')'
但在这种情况下,我怎样才能在词法分析器differenciate这两个(ID_SCAL和ID_PATH) ?
事实上的分配:'FOO:=酒吧'依赖于之前的bar声明。谢谢! @ChisDodd – 2013-04-20 19:25:29