c - 我的 C 语法的左递归错误

标签 c arrays recursion antlr grammar

我的 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};

有没有办法不用 { }?

最佳答案

为此,您需要引入上下文敏感性(或类似的东西)。

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

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

关于c - 我的 C 语法的左递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303301/

相关文章:

c - QMI SDK 启动数据 session

c++ - 从Qt C++调用已编译的C库函数会产生意外行为

c - Linux C 计时器 - 信号中断当前进程

php - 将平面数组转换为分层的多维数组

c++ - float 数组抛出 "incomplete type is not allowed"

c - 如何为字符串生成所有可能的(n 长度)子集?

c - "Freezing"控制台中的输入行并打印在上面的行上?

arrays - 查找元素数量差异最大的子数组

c++ - VS 说 "Too few arguments...",但其他编译器给我正确的输出?

Java - addDigits 方法的大O?