diff options
author | Yann Herklotz Grave <git@yannherklotzgrave.com> | 2019-02-16 21:35:45 +0000 |
---|---|---|
committer | Yann Herklotz Grave <git@yannherklotzgrave.com> | 2019-02-16 21:35:45 +0000 |
commit | 6175945fcacbb37573158ab80ccf3312ff068b33 (patch) | |
tree | 560c6e37c1b9b3ef223a92614f04250db2bc845c /src/VeriFuzz/Lexer.hs | |
parent | cc52e7d7cb1fff90ec7b0795ba1e4aeb28493fb8 (diff) | |
download | verismith-6175945fcacbb37573158ab80ccf3312ff068b33.tar.gz verismith-6175945fcacbb37573158ab80ccf3312ff068b33.zip |
Fix to parser
Diffstat (limited to 'src/VeriFuzz/Lexer.hs')
-rw-r--r-- | src/VeriFuzz/Lexer.hs | 13 |
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 |