Create identifier tokenizer

This commit is contained in:
2021-11-03 19:37:19 +01:00
parent e0953a391b
commit ce20e00704

View File

@@ -10,6 +10,7 @@ import qualified Util as U
data Token = Operator VM.Op
| IntLiteral Int
| StringLiteral String
| Identifier String
| Colon
| WhiteSpace
| Comment String
@@ -38,6 +39,13 @@ operatorTokenizer op input = keywordTokenizer False (U.toLowerCase . show $ op)
tokenizeOperators :: Tokenizer
tokenizeOperators = anyTokenizer $ map operatorTokenizer [VM.Push ..]
tokenizeIdentifier :: Tokenizer
tokenizeIdentifier input@(x:_) = if null identifier || (not . Char.isAlpha) x
then Nothing
else Just $ TokenizeResult (Identifier identifier) (length identifier)
where
identifier = takeWhile (or . sequenceA [Char.isAlphaNum, (=='_')]) input
tokenizeWhitespace :: Tokenizer
tokenizeWhitespace [] = Nothing
tokenizeWhitespace (x:_)
@@ -122,6 +130,7 @@ tokenizers = anyTokenizer
, sepTokenizer Char.isSpace tokenizeOperators
, sepTokenizer Char.isSpace tokenizeHex
, sepTokenizer Char.isSpace tokenizeDecimal
, tokenizeIdentifier
, keywordTokenizer False ":" Colon
, tokenizeChar
, tokenizeString