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