c - 在我的语法中得到转变/减少错误

标签 c compiler-construction yacc lex

这是我的编程语言的语法部分。我在编译时遇到了转移/减少冲突。

Rule 1:    encryption_spec: key_spec 

Rule 2:   key_spec:
    key_spec key_spec_content
    | key_spec_content
    ;

Rule 3:    key_spec_content: TOK_PROTECT key_keyowner 
    |TOK_PROTECT key_keyname
    |TOK_PROTECT key_keymethod
    |TOK_PROTECT key_pub_key
    |TOK_COMMA key_keyowner 
    |TOK_COMMA key_keyname
    |TOK_COMMA key_keymethod
    |TOK_COMMA key_pub_key
    |encoding
    ;

我在规则 1 中遇到 shift/reduce 冲突。 你能给我一些修改的建议吗?

最佳答案

您的 key_spec 规则格式不正确。事实上,你有一个无限递归。
您应该将其更改为类似

key_spec: /* Empty. */
    | key_spec key_spec_content
;

编辑:删除 %empty 野牛扩展。

关于c - 在我的语法中得到转变/减少错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689902/

相关文章:

python - xml DTD 文件的解析器

c - 如何重新设置 C 代码的样式以从 if 语句条件中排除赋值

埃拉托斯特尼筛法的 C 代码

flash - 慢闪cs5编译

compiler-construction - x64 上的调用约定

python - 使用 PLY 用 Python 编写的语言会很慢吗?

正确删除多个进程使用的 SYS V 信号量

c - 重构遗留 C 代码——使用外部声明来帮助拆分模块(潜在的链接和运行时问题)

c# - C# 编译器可以编译 VB.Net 代码吗?

yacc - $1 of [...] 没有声明类型