(首先这不是硬件,我有所有的答案)
我有一个简单的 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 )
最左边的应该在解析树中更高。
我们的教授给出了这样的答案:
这是 lispy 符号中的解析树。
(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')))))
')' ))))