X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=src%2Flex.icl;h=63a14e02d69a8b5e2dca8e044038eeba9375d692;hb=ca00099482644c76d6d918f536f69db32ac85058;hp=a6f31ab8eb0e4abad9d597e629c9e0bfc091bfef;hpb=6c1945d3b85c0bf8ff2d56b4a6fb456d07a7282a;p=cc1516.git diff --git a/src/lex.icl b/src/lex.icl index a6f31ab..63a14e0 100644 --- a/src/lex.icl +++ b/src/lex.icl @@ -15,10 +15,14 @@ lexer r = case runParser lexProgram r of (Left e, _) = Left $ toString e lexProgram :: Parser Char [Token] -lexProgram = some lexToken >>= \ts->pure (map (\t->(0, 0, t)) ts) +lexProgram = some lexToken <* many (satisfy isSpace) <* eof + >>= \ts->pure (map (\t->(0, 0, t)) ts) lexToken :: Parser Char TokenValue lexToken = + //Comments + (list (fromString "//") >>| until top ((item '\n' >>| return Void) <|> eof) >>| lexToken) <|> + (list (fromString "/*") >>| until top (list (fromString "*/")) >>| lexToken) <|> //Keyword tokens (lexKw "var" VarToken) <|> (lexKw "Void" VoidToken) <|> @@ -40,8 +44,9 @@ lexToken = (lexOp "<=" LesserEqToken) <|> (lexOp ">=" GreaterEqToken) <|> (lexOp "==" EqualsToken) <|> (lexOp "&&" AmpersandsToken) <|> (lexOp "||" PipesToken) <|> (lexOp "[]" EmptyListToken) <|> - (lexOp "->" ArrowToken) <|> (lexOp "(" BraceOpenToken) <|> + (lexOp "->" ArrowToken) <|> //One char ops tokens + (lexOp "(" BraceOpenToken) <|> (lexOp ")" BraceCloseToken) <|> (lexOp "{" CBraceOpenToken) <|> (lexOp "}" CBraceCloseToken) <|> (lexOp "[" SquareOpenToken) <|> (lexOp "]" SquareCloseToken) <|> (lexOp "," CommaToken) <|> @@ -55,7 +60,7 @@ lexToken = (liftM (NumberToken o toInt o toString) $ some $ satisfy isDigit) <|> //Ident tokens (liftM IdentToken $ some $ satisfy isIdentChar) <|> - (satisfy isSpace >>| lexToken) //<|> + (satisfy isSpace >>| lexToken) // (eof >>| pure EndOfFileToken) where isIdentChar c = isAlphanum c || c == '_'