{ $ = [ \t\r\n]* ; Id = [a-zA-Z_] [0-9a-zA-Z_]* ; Num = [0-9]+ ; Stm.exp : Exp ";" ; Stm.stms : "{" Stms "}" ; Stm.if : "if" "(" Exp ")" Stm "else" Stm ; Stm.while : "while" "(" Exp ")" Stm ; Exp.assign : Exp1 "=" Exp ; Exp.exp1 : Exp1 ; Exp1.or : Exp1 "||" Exp2 ; Exp1.exp2 : Exp2 ; Exp2.and : Exp2 "&&" Exp3 ; Exp2.exp3 : Exp3 ; Exp3.eq : Exp3 "==" Exp4 ; Exp3.neq : Exp3 "!=" Exp4 ; Exp3.exp4 : Exp4 ; Exp4.lt : Exp4 "<" Exp5 ; Exp4.leq : Exp4 "<=" Exp5 ; Exp4.gt : Exp4 ">" Exp5 ; Exp4.geq : Exp4 ">=" Exp5 ; Exp4.exp5 : Exp5 ; Exp5.add : Exp5 "+" Exp6 ; Exp5.sub : Exp5 "-" Exp6 ; Exp5.exp6 : Exp6 ; Exp6.mul : Exp6 "*" Exp7 ; Exp6.div : Exp6 "/" Exp7 ; Exp6.exp7 : Exp7 ; Exp7.not : "!" Exp7 ; Exp7.exp8 : Exp8 ; Exp8.par : "(" Exp ")" ; Exp8.con : Con ; Exp8.call : Id "(" Exps ")" ; Con.num : Num ; Con.id : Id ; Stms.one : Stm ; Stms.more : Stms Stm ; Exps.one : Exp ; Exps.more : Exps "," Exp ; }