0

我的 C 语法存在左递归错误,可在此处找到 http://www.archive-host.com/files/1959502/24fe084677d7655eb57ba66e1864081450017dd9/cAST.txt。当我更换

initializer
 : assignment_expression
 | '{' initializer_list '}'
 ;

initializer
 : assignment_expression
 | '{' initializer_list '}'
 |  initializer_list
 ;

我这样做是因为我试图在 Ctrl-D 中执行此代码

int k [2] = 1,4;

但是,此代码确实适用于第一个版本

int k [2] = {1,4};

请问有没有办法不用{}?

4

1 回答 1

3

为此,您需要引入上下文敏感性(或按顺序排列的东西)。

问题是它1,4已经有了定义的含义。它是一个使用逗号运算符的表达式,它计算1,丢弃结果,然后计算4,这是整个表达式的值。

因此,要完成这项工作,您必须对初始化程序使用与普通表达式不同的语法(并且在此过程中,与当前定义的 C 大相径庭)。从纯语法的角度来看,这几乎肯定不需要在上下文敏感的情况下完成,但它基本上将涉及定义初始化器的语法与普通表达式的语法分开/并行,而不是为两者使用通用语法。

于 2013-03-08T21:13:51.727 回答