2015-11-26 4 views
0

Я написал грамматик flex/Bison, который отлично работает до определенной точки. Но когда я добавляю новый нетерминал с новым правилом грамматики - независимо от того, какой из них я получаю следующее предупреждение: предупреждение: правило бесполезно в грамматике [-Wother]Bison: получение синтаксической ошибки без причины

, когда я перемещаю одно и то же правило на другое не терминал. Он отлично работает. Как будто я не могу добавить больше не терминалов.

Это часть кода, который не работает:

%type<number> expression 
%type<arr> array 
array: 
    '[' expression ']'     { cout << "SUCCESS" << endl; } 
    ;   
expression: 
    NUMBER        { $$ = $1; } 
    ; 

всех типов предопределены в союзе, и я пытался изменить правила/порядок нетерминалы. Ничего не работает. Пожалуйста, помогите, поскольку я не могу понять, в чем проблема!

+1

Этот фрагмент, очевидно, действителен. Пожалуйста, отредактируйте свой вопрос, чтобы включить достаточное количество ваших правил о том, что зубр будет выдавать предупреждающее сообщение. – rici

ответ

2

Правило бесполезно, если нетерминал, который он производит, не является символом начала или с правой стороны некоторого (полезного) производства.

Таким образом, вы не можете просто добавить новый нетерминал, если вы его также не используете.

Возможно, это не ваша проблема. В этом вопросе слишком мало информации, чтобы рассказать о вашей проблеме, но это, по крайней мере, соответствует предоставленной информации.