我正在为一种小语言编写一个杯子解析器,它应该支持以数组和矩阵作为字段的类。例如,如果有一个类实例:
C c;
使用以下方式访问字段:
c.x;
c.y[];
c.z[][];
我在为最后一部分编写作品时遇到了麻烦,因为我一直在改变/减少冲突。这是我的作品:
Designator ::= IDENT
|
Designator DOT IDENT
|
Designator LSQUARE Expr RSQUARE
|
Designator LSQUARE Expr RSQUARE LSQUARE Expr RSQUARE
;
警告: * 转移/减少状态#189中发现的冲突 在Designator :: = Designator LSQUARE Expr RSQUARE()之间 和指示符:: =指定符LSQUARE Expr RSQUARE()LSQUARE Expr RSQUARE 在符号LSQUARE下 决心转移。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
你的语法的最后一行Designator
无效。
Designator LSQUARE Expr RSQUARE
(上面两行)已经递归地定义了任意多维的锯齿状数组表达式。
根据你的语法,以下表达式将是有效的:
c.y[a].b
以下内容无效:
c.y[a].z[b]
这是出于意图吗?
查看知道锯齿状数组的C# grammar可能会很有启发性。