diff options
author | Yann Herklotz <git@ymhg.org> | 2019-03-31 21:54:20 +0100 |
---|---|---|
committer | Yann Herklotz <git@ymhg.org> | 2019-03-31 21:54:20 +0100 |
commit | 1930e7686025601e22de49aa4d4dbeed8311caa0 (patch) | |
tree | 9266dc65ac55e3136c0893d2e9468bb260483262 /src/VeriFuzz/Lexer.hs | |
parent | c0be2c6fe39902af0cf61a14936547fc780d3f6c (diff) | |
download | verismith-1930e7686025601e22de49aa4d4dbeed8311caa0.tar.gz verismith-1930e7686025601e22de49aa4d4dbeed8311caa0.zip |
Rewrite the parser with real lexer
Diffstat (limited to 'src/VeriFuzz/Lexer.hs')
-rw-r--r-- | src/VeriFuzz/Lexer.hs | 321 |
1 files changed, 0 insertions, 321 deletions
diff --git a/src/VeriFuzz/Lexer.hs b/src/VeriFuzz/Lexer.hs deleted file mode 100644 index 02e1ebf..0000000 --- a/src/VeriFuzz/Lexer.hs +++ /dev/null @@ -1,321 +0,0 @@ -{-| -Module : VeriFuzz.Lexer -Description : Lexer for Verilog. -Copyright : (c) 2019, Yann Herklotz -License : GPL-3 -Maintainer : ymherklotz [at] gmail [dot] com -Stability : experimental -Portability : POSIX - -Lexer for Verilog. --} - -module VeriFuzz.Lexer - ( lexer - , identifier - , reserved - , operator - , reservedOp - , charLiteral - , stringLiteral - , natural - , integer - , float - , naturalOrFloat - , decimal - , hexadecimal - , octal - , symbol - , lexeme - , whiteSpace - , parens - , braces - , angles - , brackets - , squares - , comma - , colon - , dot - , semiSep - , semiSep1 - , commaSep - , commaSep1 - ) -where - -import Data.Char (digitToInt) -import Text.Parsec -import qualified Text.Parsec.Token as P - -type VerilogDef = P.LanguageDef () - -type Lexer = P.TokenParser () - -type Parser = Parsec String () - -verilogDef :: VerilogDef -verilogDef = P.LanguageDef "/*" - "*/" - "//" - False - letter - (alphaNum <|> char '_') - (oneOf ":!#%&*+./<=>?@\\^|-~") - (oneOf ":!#%&*+./<=>?@\\^|-~") - reserved' - reservedOp' - True - -lexer :: Lexer -lexer = P.makeTokenParser verilogDef - -identifier :: Parser String -identifier = P.identifier lexer - -reserved :: String -> Parser () -reserved = P.reserved lexer - -operator :: Parser String -operator = P.operator lexer - -reservedOp :: String -> Parser () -reservedOp = P.reservedOp lexer - -charLiteral :: Parser Char -charLiteral = P.charLiteral lexer - -stringLiteral :: Parser String -stringLiteral = P.stringLiteral lexer - -natural :: Parser Integer -natural = P.natural lexer - -integer :: Parser Integer -integer = P.integer lexer - -float :: Parser Double -float = P.float lexer - -naturalOrFloat :: Parser (Either Integer Double) -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 = number 16 hexDigit - -octal :: Parser Integer -octal = number 8 octDigit - -symbol :: String -> Parser String -symbol = P.symbol lexer - -lexeme :: Parser a -> Parser a -lexeme = P.lexeme lexer - -whiteSpace :: Parser () -whiteSpace = P.whiteSpace lexer - -parens :: Parser a -> Parser a -parens = P.parens lexer - -braces :: Parser a -> Parser a -braces = P.braces lexer - -angles :: Parser a -> Parser a -angles = P.angles lexer - -brackets :: Parser a -> Parser a -brackets = P.brackets lexer - -squares :: Parser a -> Parser a -squares = P.squares lexer - -comma :: Parser String -comma = P.comma lexer - -colon :: Parser String -colon = P.colon lexer - -dot :: Parser String -dot = P.dot lexer - -semiSep :: Parser a -> Parser [a] -semiSep = P.semiSep lexer - -semiSep1 :: Parser a -> Parser [a] -semiSep1 = P.semiSep1 lexer - -commaSep :: Parser a -> Parser [a] -commaSep = P.commaSep lexer - -commaSep1 :: Parser a -> Parser [a] -commaSep1 = P.commaSep1 lexer - -reservedOp' :: [String] -reservedOp' = - [ "!" - , "~" - , "~&" - , "~|" - , "+" - , "-" - , "*" - , "/" - , "%" - , "==" - , "!=" - , "===" - , "!==" - , "&&" - , "||" - , "<" - , "<=" - , ">" - , ">=" - , "&" - , "|" - , "^" - , "^~" - , "~^" - , "**" - , "<<" - , ">>" - , "<<<" - , ">>>" - ] - -reserved' :: [String] -reserved' = - [ "always" - , "and" - , "assign" - , "automatic" - , "begin" - , "buf" - , "bufif0" - , "bufif1" - , "case" - , "casex" - , "casez" - , "cell" - , "cmos" - , "config" - , "deassign" - , "default" - , "defparam" - , "design" - , "disable" - , "edge" - , "else" - , "end" - , "endcase" - , "endconfig" - , "endfunction" - , "endgenerate" - , "endmodule" - , "endprimitive" - , "endspecify" - , "endtable" - , "endtask" - , "event" - , "for" - , "force" - , "forever" - , "fork" - , "function" - , "generate" - , "genvar" - , "highz0" - , "highz1" - , "if" - , "ifnone" - , "incdir" - , "include" - , "initial" - , "inout" - , "input" - , "instance" - , "integer" - , "join" - , "large" - , "liblist" - , "library" - , "localparam" - , "macromodule" - , "medium" - , "module" - , "nand" - , "negedge" - , "nmos" - , "nor" - , "noshowcancelled" - , "not" - , "notif0" - , "notif1" - , "or" - , "output" - , "parameter" - , "pmos" - , "posedge" - , "primitive" - , "pull0" - , "pull1" - , "pulldown" - , "pullup" - , "pulsestyle_onevent" - , "pulsestyle_ondetect" - , "remos" - , "real" - , "realtime" - , "reg" - , "release" - , "repeat" - , "rnmos" - , "rpmos" - , "rtran" - , "rtranif0" - , "rtranif1" - , "scalared" - , "showcancelled" - , "signed" - , "small" - , "specify" - , "specparam" - , "strong0" - , "strong1" - , "supply0" - , "supply1" - , "table" - , "task" - , "time" - , "tran" - , "tranif0" - , "tranif1" - , "tri" - , "tri0" - , "tri1" - , "triand" - , "trior" - , "trireg" - , "unsigned" - , "use" - , "vectored" - , "wait" - , "wand" - , "weak0" - , "weak1" - , "while" - , "wire" - , "wor" - , "xnor" - , "xor" - ] - |