主题:布尔表达式文法求思路
为布尔表达式编写一文法,包含常量true,false,算符and or not以及'(', ')',
要求 (1).or优先级 < and优先级 < not优先级
(2).该文法没有二义性。
上面是如题的要求,我想没有二义性则应该让算符保持左结合或者右结合,可以设定:and or左结合,not右结合,优先级的处理以递归的层次来处理,层次越底则优先级越高,可是对自己写的(如下)一点把握也没有,也不知如何改善。
所以渴望大家的指点,说说该文法的思路。等待...
G(N,T,P,S) T = {or,and,(,),not}; S = BoolExp;
P:
BoolExp -> BoolExp Orop AndExp | AndExp
Orop -> or
AndExp -> AndExp Andop NotExp | NotExp
Andop -> and
NotExp -> Notop BoolExp | (BoolExp) | Boolconst
Notop -> not
Boolconst -> true | false
要求 (1).or优先级 < and优先级 < not优先级
(2).该文法没有二义性。
上面是如题的要求,我想没有二义性则应该让算符保持左结合或者右结合,可以设定:and or左结合,not右结合,优先级的处理以递归的层次来处理,层次越底则优先级越高,可是对自己写的(如下)一点把握也没有,也不知如何改善。
所以渴望大家的指点,说说该文法的思路。等待...
G(N,T,P,S) T = {or,and,(,),not}; S = BoolExp;
P:
BoolExp -> BoolExp Orop AndExp | AndExp
Orop -> or
AndExp -> AndExp Andop NotExp | NotExp
Andop -> and
NotExp -> Notop BoolExp | (BoolExp) | Boolconst
Notop -> not
Boolconst -> true | false