1

我似乎无法解决以下规则中包含的歧义:

InitializerList_a →,[Initializer][InitializerList_a]

它在我的解析器中引起了移位/减少冲突(我正在使用 Bison)。以下是它的关闭:

InitializerList_a → ε

Initializer → [Constant]

Initializer → {[InitializerList][Initializer_a]

Initializer_a → }

Initializer_a → ,}

InitializerList → [Initializer][InitializerList_a]

任何帮助,将不胜感激。如果需要,我可以发布野牛输出文件。

这是以更易读的方式编写的相同语法:

L → IT

T → ,IT | ε

I → [Constant] | {LA

A → } | ,}

where [Constant] is a terminal
4

1 回答 1

0

这应该涵盖它。类似 YACC 的语法在语法中更喜欢头递归而不是尾递归。

%start I
%token CONSTANT
%%
I: CONSTANT | '{' L '}' ;
L: J | J ',' ;
J: I | J ',' I ;
于 2016-04-13T22:10:55.247 回答