YACC имеет конфликт сдвига / уменьшения - PullRequest
0 голосов
/ 17 января 2012

Ситуация такова, что я написал очень простой синтаксис, но при компиляции у меня возник конфликт. Я не представляю, почему такой простой синтаксис может привести к конфликту.

%token SCRIPT_ID
%token STRING
%start functions

%%
functions: SCRIPT_ID '(' STRING ')' {printf("script_id is %s", $3);};
%%

Я просто хочу использовать yacc для анализа моего файла. В моем файле есть такие вещи, как script_id ("1232444").

Я ищу в руководстве yacc и нахожу, что, говоря о сдвиге / уменьшении конфликта, возникает такой пример, как «если и еще». И я понимаю, почему «если и еще» конфликтует, если приоритетность не обозначена. Но я не знаю, какое отношение имеет этот конфликт, связанный с конфликтом, с которым я столкнулся.

Может кто-нибудь сказать мне, что не так с моим кодом?

1 Ответ

1 голос
/ 01 марта 2012

Вы не указали, какую именно ошибку вы получите. Вы также почти наверняка не показали нам всю грамматику, потому что вы не можете получить конфликт сдвига / уменьшения в грамматике только с одним правилом.

Однако, в общем, если вы хотите понять, что такое конфликт сдвига / уменьшения, вам, вероятно, нужно узнать гораздо больше о теории машин анализа LR, чем вы на самом деле хотите. Однако, если вы захотите, вы можете начать с этих страниц википедии:

Лучшим общим текстом и справочником по этой общей теме является так называемая «Книга Дракона» (настоящее название: составители: принципы, методы и инструменты): http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools

...