私はフレックス、バイソンを使って簡単な電卓を作っています。
整数式と実数式の2種類の式を含む文法を開発しました。
文法は次のようになります。
exp -> intExp | realExp
intExp -> INT | intExp '+' intExp
realExp -> REAL | realExp '+' realExp | intExp '+' realExp | realExp '+' intExp
これはLALR(1)ではありません。
たとえば、文字列INT'+'REALについて考えてみます。'INT'では先読みは'+'であり、これだけに基づいて、文字列がintExpであるかrealExpであるかを判別することは不可能です。
あいまいさを解消するために文法を書き直してみましたが、何も起こりませんでした。
解析中に計算を延期し、代わりに解析ツリーを構築できることはわかっています。次に、型チェックを使用すると、問題を解決できます。しかし、それはそのような単純な問題には少し多すぎるようです。
このあいまいさを処理するためにバイソン自体を作成する方法はありますか?それとも、文法をより良い方法で書き直すことができますか?