私はバイソンを初めて勉強しました。私は文法を解析することを試みています。 私は今解決していないシフト/リミットのconflightに直面しています。式の文法のシフト/リダクションの衝突を解決する
は、文法は以下の通りです:
%left "[" "("
%left "+"
%%
expression_list : expression_list "," expression
| expression
| /*empty*/
;
expression : "(" expression ")"
| STRING_LITERAL
| INTEGER_LITERAL
| DOUBLE_LITERAL
| expression "(" expression_list ")" /*function call*/
| expression "[" expression "]" /*index access*/
| expression "+" expression
;
これは私の文法ですが、私はこれら二つのルール"(" expression ")"
とexpression "(" expression_list ")"
との競合を減らす/シフトに直面しています。 この競合を解決するにはどうすればよいですか?
EDIT:これは優先度クライミングを使用して解決できることはわかっていますが、これは表現文法のほんの一部であり、優先度クライミングを使用して表現文法のサイズが爆発するためです。
これが文法全体である場合は、シフト・リダクションの競合はありません。しかし、私はそれがあなたの文法全体であるとは思わない。 – rici
wow私は今、本当に馬鹿だと感じています...私はこの1つに影響を与えた別のルールでタイプミスを発見しました – Exagon
それは私が[mcve]を求める理由です。 [mcve]を作成すると、問題を明確にするのに役立ちます。 – rici