{ module Grammar(parse ) where import DS toNot :: Varible -> Varible toNot Tru = Fals toNot Fals = Tru toNot (Var a) = NotVar a toNot (NotVar a) = Var a } %name parse %tokentype { Token } %token '(' { TokenBracket } ')' { TokenCloseBracket } var { TVar $$ } '0' { TokenFalse } '1' { TokenTrue } '!' { TokenNot } ',' { TokenComma } %% ProbP : '(' Conjucts ')' { $2 } Conjucts : Conjuct { [$1]} | Conjuct ',' Conjucts {$1 : $3 } Conjuct : '(' Varibles ')' { $2 } Varibles : Varible { [$1] } | Varible ',' Varibles { $1 : $3 } Varible : Term { $1 } | '!' Term { toNot $2 } Term : '0' { Fals } | '1' { Tru } | var { Var $1 } { happyError :: [Token] -> a happyError _ = error "Parse error" }