{-# LANGUAGE ImportQualifiedPost #-} module Lexer where import Text.Parsec.Char (alphaNum, letter, oneOf) import Text.Parsec.Language (emptyDef) import Text.Parsec.String (Parser) import Text.Parsec.Token qualified as Tok lexer :: Tok.TokenParser () lexer = Tok.makeTokenParser style where ops = ["/\\", "\\/", "->", "!"] names = ["forall", "exists"] style = emptyDef { Tok.commentLine = "" , Tok.reservedOpNames = ops , Tok.reservedNames = names , Tok.opStart = oneOf "\\/-" , Tok.opLetter = oneOf "\\/>" , Tok.identStart = letter , Tok.identLetter = alphaNum } parens :: Parser a -> Parser a parens = Tok.parens lexer dot :: Parser String dot = Tok.dot lexer comma :: Parser String comma = Tok.comma lexer semi :: Parser String semi = Tok.semi lexer identifier :: Parser String identifier = Tok.identifier lexer reserved :: String -> Parser () reserved = Tok.reserved lexer reservedOp :: String -> Parser () reservedOp = Tok.reservedOp lexer whiteSpace :: Parser () whiteSpace = Tok.whiteSpace lexer