나는 겉으로보기에는 단순한 변화/무익함을 줄이기 위해 노력해 왔습니다. 당연히 충돌을 무시하면 파서가 잘 작동하지만 규칙을 재구성하면 훨씬 안전 해집니다. 자, 내가 하나의 충돌 상대적으로 복잡한 문법 단순화했습니다 :미리보기 토큰 제한으로 인해 yacc에서 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)
감사를 어떤 도움이 필요해.
나는 이러한 입력을 고려하지 않았습니다. 글쎄, 내가 분석하고있는 언어는 모호성을 필요로하기 때문에 나는 그 갈등을 무시할 것이라고 생각한다. – Skyler