情况是我写了一个非常简单的语法,但是在编译时,我遇到了冲突。 我不知道为什么这么简单的语法会产生冲突。
%token SCRIPT_ID
%token STRING
%start functions
%%
functions: SCRIPT_ID '(' STRING ')' {printf("script_id is %s", $3);};
%%
我只是想使用yacc来解析我的文件。在我的文件中有一些像script_id(“1232444”)。
我搜索yacc手册,并在谈到转移/减少冲突时发现,它提出了一个例子,如'if and else'。而且我确实理解为什么“if and else”如果不是指定的话,就会发生冲突。 但我不知道if-else-conflict与我遇到的冲突有什么关系。
有人可以告诉我我的代码有什么问题吗?
答案 0 :(得分:1)
你还没有说明你得到的确切错误。你几乎肯定没有向我们展示整个语法,因为你只能通过一个规则在语法中得到转换/减少冲突。
但是,一般来说,如果你想了解转移/减少冲突是什么,你可能需要学习更多关于LR解析状态机的理论而不是你真正想要的东西。但是,假设您想要从这些维基百科页面开始:
关于这个整体主题的最佳整体文本和参考书是所谓的“龙书”,(实名:编译器:原理,技术和工具):http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools