{ module HappyGLR where } -- Typ der Eingabe %tokentype { Char } -- Terminalsymbole und zugehoerige Eingabe: %token id { 'x' } star { '*' } eq { '=' } -- Name der Parse-Funktion %name gLR S %% -- Der Rueckgabetyp kann (mittels "::") spezifiziert werden -- hier: vollstaendig geklammerter Ausdruck als String S :: { String } S : L eq R { ( '(':$1 ) ++ "=(" ++ $3 ++ "))"} | R { '(':$1 ++ [')'] } L :: { String } L : star R { "( *"++ $2 ++ [')'] } | id { "x" } R :: { String } R : L { $1 } { happyError :: String -> a happyError input = error ("Passt nicht: " ++ show input) }