add string literals
[cc1516.git] / lex.icl
diff --git a/lex.icl b/lex.icl
index aa34987..3e711c8 100644 (file)
--- a/lex.icl
+++ b/lex.icl
@@ -63,7 +63,7 @@ lexToken =
        lexWord ">" BiggerToken <|> lexWord "!" ExclamationToken <|>
        lexWord "-" DashToken <|>
        //Number and identifier tokens
-       lexNumber <|> lexIdentifier <|>
+       lexString <|> lexNumber <|> lexIdentifier <|>
        (item '\n' >>| pure LexNL) <|>
        //Whitespace
        (satisfy isSpace >>| (pure $ LexSpace 0 1)) <|>
@@ -109,10 +109,15 @@ lexToken =
                        >>= \char->pure case char of
                                'a' = LexToken 4 (CharToken $ toChar 7)
                                'b' = LexToken 4 (CharToken '\b')
-                               'b' = LexToken 4 (CharToken '\b')
                                'f' = LexToken 4 (CharToken '\f')
                                'n' = LexToken 4 (CharToken '\n')
-                               'r' = LexToken 4 (CharToken '\t')
+                               'r' = LexToken 4 (CharToken '\r')
+                               't' = LexToken 4 (CharToken '\t')
                                'v' = LexToken 4 (CharToken '\v')
                                '\'' =LexToken 4 (CharToken '\'')
                                c = (LexItemError $ "Unknown escape: " +++ toString c)
+
+               lexString :: Parser Char LexItem
+               lexString = item '"' *> (
+                       many (satisfy ((<>) '"'))) <* item '"' >>= \cs->
+                               pure $ LexToken (length cs) (StringToken cs)