Operator-Präzendenz-Parser

data Operator a = Operator 
    { precedence :: Int
    , semantics :: a -> a -> a }
operator_precedence_parser 
    :: Map String ( Operator a ) 
    -> Parser Char a -> Parser Char a

arithmetic :: Parser Char Integer
arithmetic = operator_precedence_parser ( M.fromList 
    [ ( "+", Operator { precedence = 1 
                      , semantics = (+) } )
    , ( "*", Operator { precedence = 2 
                      , semantics = (*) } 
    ] ) 
        ( zahl <|> parens arithmetic )



2009-11-20