【发布时间】:2011-06-09 02:24:14
【问题描述】:
我一直在尝试解决看似简单的 shift/reduce 冲突,但无济于事。当然,如果我忽略冲突,解析器工作正常,但如果我重新组织我的规则,我会感觉更安全。在这里,我将一个相对复杂的语法简化为单一冲突:
statement_list
: statement_list statement
|
;
statement
: lvalue '=' expression
| function
;
lvalue
: IDENTIFIER
| '(' expression ')'
;
expression
: lvalue
| function
;
function
: IDENTIFIER '(' ')'
;
使用 yacc 中的详细选项,我得到这个输出文件,描述了具有上述冲突的状态:
state 2
lvalue -> IDENTIFIER . (rule 5)
function -> IDENTIFIER . '(' ')' (rule 9)
'(' shift, and go to state 7
'(' [reduce using rule 5 (lvalue)]
$default reduce using rule 5 (lvalue)
感谢您的帮助。
【问题讨论】:
标签: parsing yacc conflict shift-reduce