算術式の文法変換


9

Theodore Norvell(1999)による再帰的降下による式の解析の記事で、著者は算術式の次の文法から始めます。

E --> E "+" E | E "-" E | "-" E | E "*" E | E "/" E | E "^" E | "(" E ")" | v

これはあいまいで左再帰的であるため、かなり悪いです。したがって、彼は左の再帰をそこから削除することから始め、その結果は次のようになります。

E --> P {B P}
P --> v | "(" E ")" | U P
B --> "+" | "-" | "*" | "/" | "^"
U --> "-"

しかし、私は彼がどのようにしてこの結果を得たのか理解できません。左側の再帰を自分で削除しようとすると、次のようになります。

  1. まず、私は1つのグループに再帰を残していないプロダクションをグループ化し、別のグループに他の(左再帰)をグループ化します。

    E --> E "+" E | E "-" E | E "*" E | E "/" E | E "^" E     // L-recursive
    E --> v | "(" E ")" | "-" E
  2. 次に、それらに名前を付け、操作を簡単にするための要素を示します。

    E --> E B E  // L-recursive; B stands for "Binary operator"
    E --> P  // not L-recursive; P stands for "Primary Expression"
    P --> v | "(" E ")" | U E   // U stands for "Unary operator"
    B --> "+" | "-" | "*" | "/" | "^"
    P --> "-"

    これで、最初の2つのプロダクションのみを処理する必要があり、処理が簡単になりました。

  3. 最初の2つのプロダクションを、非L再帰プロダクション(単純Pに、一次式)から開始し、その後にオプションのTail を書き直しTます。 (つまり、B E)に続いてTail Tまたは空の場合があります:

    E --> P T
    T --> B E T |

    (テールの空の代替に注意してください)。

  4. これらの2つのプロダクションは、EBNFで次のように書き直すことができます。

    E --> P {B E}

    これは著者が得るものとほぼ同じですが、E代わりにPゼロ以上の繰り返しパターン(テール)の中にあります。他の作品は、彼が手に入れたものとまったく同じです。

    P --> v | "(" E ")" | U E
    B -> "+" | "-" | "*" | "/" | "^"
    U -> "-"

    しかしここでも、私は持っているE代わりのPための最初の生産にP

だから、私の質問です:私は何が欠けていますか?オートが取得するのと同じ正確な形式を取得するために、次に進む必要がある構文の代数的変換は何ですか?私はの置換を試みましたEが、それは私をループに導くだけです。私は代用する何とか必要があると思われるPためにE、私はそれを正当化する法的変換を知りません。たぶん、最後の足りないステップは何か知っていますか?


書式設定にはLaTeXの使用を検討してください。入門書はこちらをご覧ください。(この場合のLaTeXの適合性については、こちらを参照してください。)
ラファエル

回答:


8

足りないステップ:

E --> P T
T --> B E T |

EをTに書き換えます。

E --> P T
T --> B P T T | 

Tを簡略化:

E --> P T
T --> B P T | 

に相当:

E --> P T
T --> {B P}

そして、あなたはそこにいます。


1
良い答えをありがとう:-)今、私は私が見逃したものを見ます:私はそれを逆に実質化し、それが問題でした。しかし、それでも私は1つの小さな部分を理解していません。どうすればTsを安全に1つにマージできることがわかりますTか?そのためのルールはありますか?(これは、「aa = a」と言うブール代数論理のルールに何らかの形で似ているのではないかと
思い

ところで、この投稿がcstheory.sxからここに移動されたのはなぜですか?違いは何ですか?今後間違いをしないようにしたいのですが。
SasQ 2012

2
@SasQ CSTheoryは、理論的なコンピュータサイエンスの研究レベルの質問のみを対象としています。詳細については、CSTheoryのFAQを参照してください。
Juho 2012

1
TバツTT|εバツTバツT|εLL=LLεL+L+L+

@Raphael:それはべき等のルールと関係があり*ますか?『ドラゴンブック』(3.3、91ページ)で見たx** = x*。それはあなたが使ったのと同じルールですか?
SasQ 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.