aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Lexer.hs
diff options
context:
space:
mode:
authorYann Herklotz Grave <git@yannherklotzgrave.com>2019-02-16 21:35:45 +0000
committerYann Herklotz Grave <git@yannherklotzgrave.com>2019-02-16 21:35:45 +0000
commit6175945fcacbb37573158ab80ccf3312ff068b33 (patch)
tree560c6e37c1b9b3ef223a92614f04250db2bc845c /src/VeriFuzz/Lexer.hs
parentcc52e7d7cb1fff90ec7b0795ba1e4aeb28493fb8 (diff)
downloadverismith-6175945fcacbb37573158ab80ccf3312ff068b33.tar.gz
verismith-6175945fcacbb37573158ab80ccf3312ff068b33.zip
Fix to parser
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