我的C语法的左递归错误

时间:2013-03-08 21:06:39

标签: 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 个答案:

答案 0 :(得分:3)

为此,您需要引入上下文敏感度(或该订单上的某些内容)。

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

因此,为了使这项工作,您必须使用与正常表达式不同的语法(并且在此过程中,从当前定义的C中相当广泛地离开)。从纯粹的语法角度来看,几乎可以肯定不需要使用上下文敏感性,但它基本上将涉及与正常表达式的语法分开定义初始化器的语法,而不是使用两者的通用语法。