这是我的编程语言的语法部分。我在编译时遇到了转换/减少冲突。
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中得到转移/减少冲突。 你能建议我修改一下吗?
答案 0 :(得分:3)
您的key_spec
规则格式不正确。确实,你有一个无限的递归
您应该将其更改为
key_spec: /* Empty. */
| key_spec key_spec_content
;
编辑:删除%empty
野牛分机。
答案 1 :(得分:1)
@Leo的规则不正确,因为它允许零个出现的key_spec_content,其中原始版本需要至少一个。以下应该这样做:
key_spec:
key_spec key_spec_content
| key_spec_content
;
但是,此规则有不必要的递归。以下应该更好:
key_spec:
key_spec_content key_spec
| key_spec_content
;
这可以在看到每个key_spec_content之后减少。