-module Expr_eval (expr) where
+module Expr_eval (expr, testExpr) where
import DTFormat
import Text.ParserCombinators.Parsec.Language
import System.IO
import Data.Word
+import Data.List
import Data.Bits
lexer :: P.TokenParser ()
decimal = P.decimal lexer
hexadecimal = P.hexadecimal lexer
-parens = P.parens lexer
reservedOp = P.reservedOp lexer
expr :: [DictElem] -> Parser Word32
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"