私は一見シンプルなシフントシップ/無用の競合を解決しようとしてきました。当然のことながら、コンフリクトを無視すれば、パーサはうまく動作しますが、ルールを再編成すればもっと安全に感じられます。ここで、私は、単一の紛争に比較的複雑な文法簡略化されました:先読みトークンの制限のためにyaccのShift/reduce競合が発生しましたか?
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)
感謝:YACCで冗長オプションで
statement_list
: statement_list statement
|
;
statement
: lvalue '=' expression
| function
;
lvalue
: IDENTIFIER
| '(' expression ')'
;
expression
: lvalue
| function
;
function
: IDENTIFIER '(' ')'
;
を、私が言及した紛争に状態を記述する、この出力ファイルを取得しますあなたはどんな援助のためにも。
私はそのような入力を考慮していませんでした。まあ、私が解析している言語はあいまいさを必要とするので、私はその矛盾を無視すると思います。 – Skyler