summaryrefslogtreecommitdiff
path: root/src/Language/Fiddle/Tokenizer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/Fiddle/Tokenizer.hs')
-rw-r--r--src/Language/Fiddle/Tokenizer.hs31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/Language/Fiddle/Tokenizer.hs b/src/Language/Fiddle/Tokenizer.hs
index d3239fd..ec41042 100644
--- a/src/Language/Fiddle/Tokenizer.hs
+++ b/src/Language/Fiddle/Tokenizer.hs
@@ -1,29 +1,34 @@
{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE OverloadedStrings #-}
+
module Language.Fiddle.Tokenizer where
import Data.Char (isDigit)
import Data.Text (Text)
+import qualified Data.Text
import Language.Fiddle.Types
import Text.Parsec
import qualified Text.Parsec
data T
= KWAssertPos
- | Ident !String
+ | TokIdent !Text
| KWAt
- | KWBittype
+ | KWBits
| KWEnum
- | CommentTok !String
- | DocCommentTok !String
+ | TokComment !Text
+ | TokDocComment !Text
| KWLocation
| KWObject
| KWObjtype
| KWOption
| KWPackage
| KWReg
+ | KWReserved
| KWRo
| KWWo
- | LitNum !String
+ | KWRw
+ | TokLitNum !Text
| TokColon
| TokComma
| TokEq
@@ -48,10 +53,11 @@ parseToken = spaces *> tok parseToken' <* spaces
Token t . SourceSpan p1 <$> getPosition
+ parseAlNumTok :: Text -> T
parseAlNumTok str =
case str of
"at" -> KWAt
- "bittype" -> KWBittype
+ "bits" -> KWBits
"enum" -> KWEnum
"location" -> KWLocation
"object" -> KWObject
@@ -61,19 +67,22 @@ parseToken = spaces *> tok parseToken' <* spaces
"reg" -> KWReg
"ro" -> KWRo
"wo" -> KWWo
- (h : _) | isDigit h -> LitNum str
- ident -> Ident ident
+ "rw" -> KWRw
+ "reserved" -> KWReserved
+ "assert_pos" -> KWAssertPos
+ (Data.Text.head -> h) | isDigit h -> TokLitNum str
+ ident -> TokIdent ident
parseComment =
try
( do
string "//"
- CommentTok <$> manyTill anyChar (char '\n')
+ TokComment . Data.Text.pack <$> manyTill anyChar (char '\n')
)
<|> try
( do
string "/**"
- DocCommentTok <$> manyTill anyChar (try $ string "*/")
+ TokDocComment . Data.Text.pack <$> manyTill anyChar (try $ string "*/")
)
parseSymbol =
@@ -93,7 +102,7 @@ parseToken = spaces *> tok parseToken' <* spaces
a $> b = a >> return b
parseToken' =
- fmap parseAlNumTok (many1 (alphaNum <|> char '_'))
+ fmap (parseAlNumTok . Data.Text.pack) (many1 (alphaNum <|> char '_'))
<|> parseComment
<|> parseSymbol