lexer met generics
[cc1516.git] / src / lex.icl
index b6e56d5..cbeaf76 100644 (file)
@@ -15,7 +15,7 @@ SingleCharTokens = fromList [
        (',', CommaToken), (':', ColonToken), (';', SColonToken),
        ('.', DotToken), ('+', PlusToken), ('*', StarToken), ('/', SlashToken),
        ('%', PercentToken), ('=', AssignmentToken), ('<', LesserToken),
-       ('>', BiggerToken), ('!', ExclamationToken)]
+       ('>', BiggerToken), ('!', ExclamationToken), ('-', DashToken)]
 
 EscapeMap :: Map Char Char
 EscapeMap = fromList [('a', toChar 7), ('b', '\b'), ('f', '\f'), ('n', '\n'),
@@ -65,10 +65,6 @@ lex ['\'':x:'\'':xs] = ret (CharToken x) xs
 lex ['\'':'\\':x:'\'':xs] = case get x EscapeMap of
        Just t = ret (CharToken t) xs
        _ = err ("Unknown escape: \\" +++ toString x)
-lex ['-':t=:[x:xs]]
-| isDigit x = let (n, r) = span isDigit t in
-       ret (NumberToken (toInt $ toString ['-':n])) r
-| otherwise = ret DashToken t 
 lex t=:[x:xs] = case get x SingleCharTokens of
        (Just tok) = ret tok xs
        Nothing
@@ -81,47 +77,10 @@ lex t=:[x:xs] = case get x SingleCharTokens of
        | otherwise = err ("Unexpected character: " +++ toString x)
 
 
+derive gEq TokenValue
+
 (===) :: TokenValue Token -> Bool
 (===) (IdentToken _) (_, IdentToken _) = True
 (===) (NumberToken _) (_, NumberToken _) = True
 (===) (CharToken _) (_, CharToken _) = True
-(===) (VarToken) (_, VarToken) = True
-(===) (ReturnToken) (_, ReturnToken) = True
-(===) (IfToken) (_, IfToken) = True
-(===) (ElseToken) (_, ElseToken) = True
-(===) (WhileToken) (_, WhileToken) = True
-(===) (TrueToken) (_, TrueToken) = True
-(===) (FalseToken) (_, FalseToken) = True
-(===) (VoidToken) (_, VoidToken) = True
-(===) (IntTypeToken) (_, IntTypeToken) = True
-(===) (CharTypeToken) (_, CharTypeToken) = True
-(===) (BoolTypeToken) (_, BoolTypeToken) = True
-(===) (DoubleColonToken) (_, DoubleColonToken) = True
-(===) (NotEqualToken) (_, NotEqualToken) = True
-(===) (LesserEqToken) (_, LesserEqToken) = True
-(===) (GreaterEqToken) (_, GreaterEqToken) = True
-(===) (EqualsToken) (_, EqualsToken) = True
-(===) (AmpersandsToken) (_, AmpersandsToken) = True
-(===) (PipesToken) (_, PipesToken) = True
-(===) (ArrowToken) (_, ArrowToken) = True
-(===) (EmptyListToken) (_, EmptyListToken) = True
-(===) (BraceOpenToken) (_, BraceOpenToken) = True
-(===) (BraceCloseToken) (_, BraceCloseToken) = True
-(===) (CBraceOpenToken) (_, CBraceOpenToken) = True
-(===) (CBraceCloseToken) (_, CBraceCloseToken) = True
-(===) (SquareOpenToken) (_, SquareOpenToken) = True
-(===) (SquareCloseToken) (_, SquareCloseToken) = True
-(===) (CommaToken) (_, CommaToken) = True
-(===) (ColonToken) (_, ColonToken) = True
-(===) (SColonToken) (_, SColonToken) = True
-(===) (DotToken) (_, DotToken) = True
-(===) (PlusToken) (_, PlusToken) = True
-(===) (DashToken) (_, DashToken) = True
-(===) (StarToken) (_, StarToken) = True
-(===) (SlashToken) (_, SlashToken) = True
-(===) (PercentToken) (_, PercentToken) = True
-(===) (AssignmentToken) (_, AssignmentToken) = True
-(===) (LesserToken) (_, LesserToken) = True
-(===) (BiggerToken) (_, BiggerToken) = True
-(===) (ExclamationToken) (_, ExclamationToken) = True
-(===) _ _ = False
+(===) x (_, y) = gEq {|*|} x y