BNF文法とオペレーターの関連性
-
27-09-2019 - |
質問
(まず第一に、これは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」を作成したい場合は、「節」から始めて、次のように開始します。
- 句
- 句 と 段階
その時点で、フレーズは「bとc」(括弧なし)になることはできません。なぜなら、条項のみが生成できるため、「括弧なし)。フレーズは「c」に発展する必要があり、2行目の句は「aとb」になります。これにより、右端が強制されます」と「解析ツリーで高くなります。
解析ツリーのより高い要素は最後に評価されるため、これはオペレーターと「連想的なままであるという主張と一致しています。
所属していません StackOverflow