X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=3a_asm%2FExpr_eval.hs;h=71e0f4de63ae06f083fde358ea8a9bb3a64c758f;hb=d4a0ea68530da911bc41c44b24d244c7dc198190;hp=1b12f4b7b3e1401287e286aa9d9f8ac4d18a7947;hpb=9dd69a23aa1aceb8afc59218daa197fcba49f4b7;p=calu.git diff --git a/3a_asm/Expr_eval.hs b/3a_asm/Expr_eval.hs index 1b12f4b..71e0f4d 100644 --- a/3a_asm/Expr_eval.hs +++ b/3a_asm/Expr_eval.hs @@ -1,4 +1,4 @@ -module Expr_eval (expr) where +module Expr_eval (expr, testExpr) where import DTFormat @@ -10,6 +10,7 @@ import qualified Text.ParserCombinators.Parsec.Token as P import Text.ParserCombinators.Parsec.Language import System.IO import Data.Word +import Data.List import Data.Bits lexer :: P.TokenParser () @@ -17,7 +18,6 @@ lexer = P.makeTokenParser (haskellDef { reservedOpNames = ["*","/","+","-","<<", decimal = P.decimal lexer hexadecimal = P.hexadecimal lexer -parens = P.parens lexer reservedOp = P.reservedOp lexer expr :: [DictElem] -> Parser Word32 @@ -48,16 +48,17 @@ factor_spaces d = do factor :: [DictElem] -> Parser Word32 factor d = do { - parens (expr d); + char '('; r <- expr d; char ')'; + return r } <|> do { -- define or label s <- foldl1 (<|>) (fmap (try . string . fst) d); return $ (get_elem s d) - } <|> do { + } <|> try (do { string "0"; r <- hexadecimal; return $ fromInteger r - } <|> do { + } ) <|> do { r <- decimal; return $ fromInteger r } "factor"