Everything is now Data.Text instead of String
This commit is contained in:
parent
753f429ec8
commit
cbfd729795
18 changed files with 178 additions and 137 deletions
|
@ -1,3 +1,4 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE NoMonomorphismRestriction #-}
|
||||
module Ubc.Parse.Syntax.Language
|
||||
( languageDef
|
||||
|
@ -33,19 +34,24 @@ module Ubc.Parse.Syntax.Language
|
|||
)
|
||||
where
|
||||
|
||||
import Data.Functor ( ($>) )
|
||||
import Data.Functor ( ($>), (<&>) )
|
||||
import qualified Data.Text as Text
|
||||
|
||||
import Text.Parsec
|
||||
( alphaNum, char, letter, oneOf, choice, (<|>), ParsecT )
|
||||
import Text.Parsec.Token
|
||||
( makeTokenParser,
|
||||
GenLanguageDef(..),
|
||||
GenTokenParser(TokenParser, identifier, reserved, operator,
|
||||
reservedOp, charLiteral, stringLiteral, natural, integer, float,
|
||||
naturalOrFloat, decimal, hexadecimal, octal, symbol, lexeme,
|
||||
whiteSpace, parens, braces, angles, brackets, semi, comma, colon,
|
||||
dot, semiSep, semiSep1, commaSep, commaSep1) )
|
||||
GenTokenParser(TokenParser,
|
||||
charLiteral, natural, integer, float,
|
||||
naturalOrFloat, decimal, hexadecimal, octal, lexeme,
|
||||
whiteSpace, parens, braces, angles, brackets,
|
||||
semiSep, semiSep1, commaSep, commaSep1) )
|
||||
import qualified Text.Parsec.Token as Token
|
||||
|
||||
languageDef :: Monad m => GenLanguageDef String u m
|
||||
import Ubc.Parse.Syntax (Token)
|
||||
|
||||
languageDef :: Monad m => GenLanguageDef Token u m
|
||||
languageDef = LanguageDef {
|
||||
commentStart = "/*"
|
||||
, commentEnd = "*/"
|
||||
|
@ -92,44 +98,29 @@ languageDef = LanguageDef {
|
|||
, caseSensitive = True
|
||||
}
|
||||
|
||||
tokenParser :: Monad m => GenTokenParser String u m
|
||||
tokenParser :: Monad m => GenTokenParser Token u m
|
||||
tokenParser = makeTokenParser languageDef
|
||||
|
||||
identifier :: Monad m => ParsecT String u m String
|
||||
reserved :: Monad m => String -> ParsecT String u m ()
|
||||
operator :: Monad m => ParsecT String u m String
|
||||
reservedOperator :: Monad m => String -> ParsecT String u m ()
|
||||
characterLiteral :: Monad m => ParsecT String u m Char
|
||||
stringLiteral :: Monad m => ParsecT String u m String
|
||||
natural :: Monad m => ParsecT String u m Integer
|
||||
integer :: Monad m => ParsecT String u m Integer
|
||||
float :: Monad m => ParsecT String u m Double
|
||||
naturalOrFloat :: Monad m => ParsecT String u m (Either Integer Double)
|
||||
decimal :: Monad m => ParsecT String u m Integer
|
||||
hexadecimal :: Monad m => ParsecT String u m Integer
|
||||
octal :: Monad m => ParsecT String u m Integer
|
||||
symbol :: Monad m => String -> ParsecT String u m String
|
||||
lexeme :: Monad m => ParsecT String u m a -> ParsecT String u m a
|
||||
whiteSpace :: Monad m => ParsecT String u m ()
|
||||
parens :: Monad m => ParsecT String u m a -> ParsecT String u m a
|
||||
braces :: Monad m => ParsecT String u m a -> ParsecT String u m a
|
||||
angles :: Monad m => ParsecT String u m a -> ParsecT String u m a
|
||||
brackets :: Monad m => ParsecT String u m a -> ParsecT String u m a
|
||||
semicolon :: Monad m => ParsecT String u m String
|
||||
comma :: Monad m => ParsecT String u m String
|
||||
colon :: Monad m => ParsecT String u m String
|
||||
dot :: Monad m => ParsecT String u m String
|
||||
semicolonSeparated :: Monad m => ParsecT String u m a -> ParsecT String u m [a]
|
||||
semicolonSeparated1 :: Monad m => ParsecT String u m a -> ParsecT String u m [a]
|
||||
commaSeparated :: Monad m => ParsecT String u m a -> ParsecT String u m [a]
|
||||
commaSeparated1 :: Monad m => ParsecT String u m a -> ParsecT String u m [a]
|
||||
characterLiteral :: Monad m => ParsecT Token u m Char
|
||||
natural :: Monad m => ParsecT Token u m Integer
|
||||
integer :: Monad m => ParsecT Token u m Integer
|
||||
float :: Monad m => ParsecT Token u m Double
|
||||
naturalOrFloat :: Monad m => ParsecT Token u m (Either Integer Double)
|
||||
decimal :: Monad m => ParsecT Token u m Integer
|
||||
hexadecimal :: Monad m => ParsecT Token u m Integer
|
||||
octal :: Monad m => ParsecT Token u m Integer
|
||||
lexeme :: Monad m => ParsecT Token u m a -> ParsecT Token u m a
|
||||
whiteSpace :: Monad m => ParsecT Token u m ()
|
||||
parens :: Monad m => ParsecT Token u m a -> ParsecT Token u m a
|
||||
braces :: Monad m => ParsecT Token u m a -> ParsecT Token u m a
|
||||
angles :: Monad m => ParsecT Token u m a -> ParsecT Token u m a
|
||||
brackets :: Monad m => ParsecT Token u m a -> ParsecT Token u m a
|
||||
semicolonSeparated :: Monad m => ParsecT Token u m a -> ParsecT Token u m [a]
|
||||
semicolonSeparated1 :: Monad m => ParsecT Token u m a -> ParsecT Token u m [a]
|
||||
commaSeparated :: Monad m => ParsecT Token u m a -> ParsecT Token u m [a]
|
||||
commaSeparated1 :: Monad m => ParsecT Token u m a -> ParsecT Token u m [a]
|
||||
TokenParser{
|
||||
identifier = identifier
|
||||
, reserved = reserved
|
||||
, operator = operator
|
||||
, reservedOp = reservedOperator
|
||||
, charLiteral = characterLiteral
|
||||
, stringLiteral = stringLiteral
|
||||
charLiteral = characterLiteral
|
||||
, natural = natural -- decimal, hexadecimal or octal
|
||||
, integer = integer -- decimal, hexadecimal or octal
|
||||
, float = float
|
||||
|
@ -137,24 +128,49 @@ TokenParser{
|
|||
, decimal = decimal
|
||||
, hexadecimal = hexadecimal
|
||||
, octal = octal
|
||||
, symbol = symbol
|
||||
, lexeme = lexeme
|
||||
, whiteSpace = whiteSpace
|
||||
, parens = parens
|
||||
, braces = braces
|
||||
, angles = angles
|
||||
, brackets = brackets
|
||||
, semi = semicolon
|
||||
, comma = comma
|
||||
, colon = colon
|
||||
, dot = dot
|
||||
, semiSep = semicolonSeparated
|
||||
, semiSep1 = semicolonSeparated1
|
||||
, commaSep = commaSeparated
|
||||
, commaSep1 = commaSeparated1
|
||||
} = tokenParser
|
||||
|
||||
typeName :: Monad m => ParsecT String u m String
|
||||
semicolon :: Monad m => ParsecT Token u m Token
|
||||
semicolon = Token.semi tokenParser <&> Text.pack
|
||||
|
||||
comma :: Monad m => ParsecT Token u m Token
|
||||
comma = Token.comma tokenParser <&> Text.pack
|
||||
|
||||
colon :: Monad m => ParsecT Token u m Token
|
||||
colon = Token.colon tokenParser <&> Text.pack
|
||||
|
||||
dot :: Monad m => ParsecT Token u m Token
|
||||
dot = Token.dot tokenParser <&> Text.pack
|
||||
|
||||
symbol :: Monad m => String -> ParsecT Token u m Token
|
||||
symbol = (<&> Text.pack) . Token.symbol tokenParser
|
||||
|
||||
stringLiteral :: Monad m => ParsecT Token u m Token
|
||||
stringLiteral = Token.stringLiteral tokenParser <&> Text.pack
|
||||
|
||||
identifier :: Monad m => ParsecT Token u m Token
|
||||
identifier = Token.identifier tokenParser <&> Text.pack
|
||||
|
||||
reserved :: Monad m => String -> ParsecT Token u m ()
|
||||
reserved = Token.reserved tokenParser
|
||||
|
||||
operator :: Monad m => ParsecT Token u m Token
|
||||
operator = Token.operator tokenParser <&> Text.pack
|
||||
|
||||
reservedOperator :: Monad m => String -> ParsecT Token u m ()
|
||||
reservedOperator = Token.reservedOp tokenParser
|
||||
|
||||
typeName :: Monad m => ParsecT Token u m Token
|
||||
typeName = choice
|
||||
[ Ubc.Parse.Syntax.Language.reserved "i32" $> "i32"
|
||||
, Ubc.Parse.Syntax.Language.reserved "u32" $> "u32"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue