0

我正在为一种小语言编写一个杯子解析器,该语言应该支持以数组和矩阵作为其字段的类。例如,如果有一个类实例:

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 中发现 Shift/Reduce 冲突,在 Designator ::= Designator LSQUARE Expr RSQUARE ( ) 和 Designator ::= Designator LSQUARE Expr RSQUARE ( ) LSQUARE Expr RSQUARE 下符号 LSQUARE 已解决,有利于移位。

谁能帮我解决这个问题?

4

1 回答 1

0

语法的最后Designator一行无效。 Designator LSQUARE Expr RSQUARE(上面两行)已经递归地定义了任意多维的交错数组表达式。

根据您的语法,以下表达式将是有效的:

c.y[a].b

以下内容无效:

c.y[a].z[b]

是故意的吗?

看看了解锯齿状数组的C# 语法可能会很有启发性。

于 2013-05-11T12:00:19.423 回答