解决 C 初始化列表的语法歧义
Resolve ambiguity from grammar for C initialization list
我似乎无法解决以下规则中包含的歧义:
InitializerList_a →,[初始化器][InitializerList_a]
它导致我的解析器发生 shift/reduce 冲突(我使用的是 Bison)。以下是它的闭包:
InitializerList_a → ε
Initializer → [Constant]
Initializer → {[InitializerList][Initializer_a]
Initializer_a → }
Initializer_a → ,}
InitializerList → [Initializer][InitializerList_a]
如有任何帮助,我们将不胜感激。如果需要,我可以 post 野牛输出文件。
下面是用更易读的方式编写的相同语法:
L → IT
T → ,IT | ε
I → [Constant] | {LA
A → } | ,}
where [Constant] is a terminal
这应该涵盖了它。类似 YACC 的语法在语法中更喜欢头递归而不是尾递归。
%start I
%token CONSTANT
%%
I: CONSTANT | '{' L '}' ;
L: J | J ',' ;
J: I | J ',' I ;
我似乎无法解决以下规则中包含的歧义:
InitializerList_a →,[初始化器][InitializerList_a]
它导致我的解析器发生 shift/reduce 冲突(我使用的是 Bison)。以下是它的闭包:
InitializerList_a → ε
Initializer → [Constant]
Initializer → {[InitializerList][Initializer_a]
Initializer_a → }
Initializer_a → ,}
InitializerList → [Initializer][InitializerList_a]
如有任何帮助,我们将不胜感激。如果需要,我可以 post 野牛输出文件。
下面是用更易读的方式编写的相同语法:
L → IT
T → ,IT | ε
I → [Constant] | {LA
A → } | ,}
where [Constant] is a terminal
这应该涵盖了它。类似 YACC 的语法在语法中更喜欢头递归而不是尾递归。
%start I
%token CONSTANT
%%
I: CONSTANT | '{' L '}' ;
L: J | J ',' ;
J: I | J ',' I ;