repositories
/
cc1516.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
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
lexWord ">" BiggerToken <|> lexWord "!" ExclamationToken <|>
lexWord "-" DashToken <|>
//Number and identifier tokens
- lexNumber <|> lexIdentifier <|>
+ lex
String <|> lex
Number <|> lexIdentifier <|>
(item '\n' >>| pure LexNL) <|>
//Whitespace
(satisfy isSpace >>| (pure $ LexSpace 0 1)) <|>
(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')
>>= \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')
'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)
'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)