aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Lexer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/VeriFuzz/Lexer.hs')
-rw-r--r--src/VeriFuzz/Lexer.hs13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/VeriFuzz/Lexer.hs b/src/VeriFuzz/Lexer.hs
index 2357f57..f06656b 100644
--- a/src/VeriFuzz/Lexer.hs
+++ b/src/VeriFuzz/Lexer.hs
@@ -42,6 +42,7 @@ module VeriFuzz.Lexer
, commaSep1
) where
+import Data.Char (digitToInt)
import Text.Parsec
import qualified Text.Parsec.Token as P
@@ -53,7 +54,7 @@ type Parser = Parsec String ()
verilogDef :: VerilogDef
verilogDef = P.LanguageDef "/*" "*/" "//" False letter (alphaNum <|> char '_')
- (oneOf ":!#$%&*+./<=>?@\\^|-~") (oneOf ":!#$%&*+./<=>?@\\^|-~")
+ (oneOf ":!#%&*+./<=>?@\\^|-~") (oneOf ":!#%&*+./<=>?@\\^|-~")
reserved' reservedOp' True
lexer :: Lexer
@@ -92,11 +93,17 @@ naturalOrFloat = P.naturalOrFloat lexer
decimal :: Parser Integer
decimal = P.decimal lexer
+number :: Integer -> Parser Char -> Parser Integer
+number base baseDigit = do
+ digits <- many1 baseDigit
+ let n = foldl (\x d -> base*x + toInteger (digitToInt d)) 0 digits
+ seq n (return n)
+
hexadecimal :: Parser Integer
-hexadecimal = P.hexadecimal lexer
+hexadecimal = number 16 hexDigit
octal :: Parser Integer
-octal = P.octal lexer
+octal = number 8 octDigit
symbol :: String -> Parser String
symbol = P.symbol lexer