0
我在yacc编译期间遇到了冲突问题。yacc转换/减少冲突
错误以下消息:下面
24: shift/reduce conflict (shift 66, reduce 99) on '/'
state 24
arithmetic_leaf : absolute_path . (99)
absolute_path : absolute_path . '/' relative_path (102)
代码:
arithmetic_leaf: '(' arithmetic_expression ')'
{
}
| integer_value
{
}
| real_value
{
}
| absolute_path
{
}
;
absolute_path: '/'
{
}
| '/' relative_path
{
}
| absolute_path '/' relative_path
{
}
;
relative_path: path_segment
{
}
| relative_path '/' path_segment
{
}
;
path_segment: V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF
{
}
| V_ATTRIBUTE_IDENTIFIER '[' V_ARCHETYPE_ID ']'
{
}
| V_ATTRIBUTE_IDENTIFIER
{
}
;
此时,会发生 '移/减少' 冲突。
我不知道是什么问题。如何解决这个冲突?
谢谢。
谢谢。我解决冲突。首先我删除'absolute_path'/'relative_path'并将'%right'/''添加到标题部分。但是当'/'用作算术标记时,我担心错误发生。 – 2012-07-10 08:00:47
@Hoon:是的,这可能是一个合理的担忧 - 但是“上下文”可以防止冲突的机会相当不错。然而,给定类似'a/b'的东西,却无法猜测它是相对路径还是“一分为二”。 – 2012-07-10 08:05:27