定義一個由以下符號所組成的運算式。
二元運算子:
*, +, ->, <->
一元運算子:~
變數:X, Y, Z
括號:(, )
運算子的優先順序(precedence)依序為~,{*, +},
{->, <->},
運算都是由左至右(left-associative),括號必須左右對稱且先左後右。
合法的運算式有如:X,
Y,
~Y+~X,(Y*X<->Z*X),
~~Y 或
(~(X))->(Z)。而不合法的運算式則如:X~, Z->YZY 或*X)Y+Z(。
請完成以下BNF grammar,用以產生所有合法的運算式,但不會產生
不合法的運算式。(15 分)
<var> ::=
X | Y | Z
<factor> ::=
?
|
?
|
?
<term> ::=
?
|
?
|
?
<exp> ::=
?
|
?
|
?
請畫出Y*X->Z 的剖析樹(parse tree)。(5 分)