0

あいまいな文法:文法からのあいまいさの除去

E - > UV | EBE | V | [E]

V - > a | b

U - > < | >

B - >? | ! | @

一部の情報:

優先順序:? <! < @、単項演算子(<、>)が最高である

バイナリ演算子?、!、@は正しい結合です。

私の試み:

E - > UV | EBT | V | [E]

T - > E

V - > | b

U - > < | >

B - >? | B1

B1 - >! | B2

B2 - >

@私は私が私の変換中に、いくつかのコーナーケースを残している場合はわかりません。皆さんが間違いを指摘し、いくつかのヒントを提供することができれば幸いです。

答えて

0

E -> UV | EBE | V | [E] V -> a | b U -> < | > B -> ? | ! | @

優先順位:? <! < @、単項演算子(<、>)は、 が最高です。

バイナリ演算子?、!、@は右結合です。

!>よりも優先順位が高いことを意味するため、優先順位を混乱させてしまいました。私はステップの標準的な手順があることを確認するために、明確な文法が曖昧な文法よりも通常より、すべての中間の文字を使用することについてであることに注意します

a,b,<,>,?,!,@

:だから優先順を想定し

つまり、各文字列は同じ構文解析ツリーを持つことになります。最高優先順位は、非終端記号から終端記号への最終的な変換に最も近い変換であることを意味します。

私の答えは次のようになります。

E -> V?E | V!E | [email protected] | [E] //Right associativity = right recursive V-> <V | >V | E | T | a | b T-> a | b | E

受け入れられない/しかし、非常にあなたのターゲット文字列を知らずに知ることは困難と認められました。

関連する問題