質問

(まず第一に、これはHWではありません、私はすべての答えを持っています)

簡単なBNF文法があります

<UNIT> ::= ( <CLAUSE> ) | a | b | c
<ITEM> ::= not <UNIT> | <UNIT>
<CLAUSE> ::= <CLAUSE> and <PHRASE> | <PHRASE>
<PHRASE> ::= <ITEM> | <ITEM> or <PHRASE>

and オペレーターは連想的に残っています(左手の再帰)or オペレーターは正しい連想です(今回は、右の再帰です)

与えられた表現 c and b or not a and ( not b or c ), 、なぜ最も正しいのか」と「解析ツリーの中で高くなっていますか?
方法、わかります c **and** b or not a and ( not b or c ) ほとんどのものは、解析ツリーでより高くする必要があります。

私たちの教授はこの答えを提供しました:

これが、リスピー表記の解析ツリーです。

(clause (clause (clause (phrase (item (unit 'c'))))
'and'
(phrase (item (unit 'b'))
'or'
(phrase (item 'not'
(unit 'a')))))
**'and'** // is higher in parse tree
(phrase (item (unit '('
(clause (phrase (item 'not’(unit 'b'))
'or'
(phrase (item (unit 'c')))))
')' ))))
役に立ちましたか?

解決

与えられたBNFの文法は、解析ツリーと一致しているようであり、「 "および" "and"が左結合しているはずであるという主張と一致しています。この文法を使用して「aとbとc」を作成したい場合は、「節」から始めて、次のように開始します。

  1. 段階

その時点で、フレーズは「bとc」(括弧なし)になることはできません。なぜなら、条項のみが生成できるため、「括弧なし)。フレーズは「c」に発展する必要があり、2行目の句は「aとb」になります。これにより、右端が強制されます」と「解析ツリーで高くなります。

解析ツリーのより高い要素は最後に評価されるため、これはオペレーターと「連想的なままであるという主張と一致しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top