diff --git a/Lexer.x b/Lexer.x index 63e7418c5317adf7d9f1ace4a58121b14ffe158f..28114f56ebcda1a735e3525a15b24a7bdb2fccfc 100644 --- a/Lexer.x +++ b/Lexer.x @@ -1,4 +1,65 @@ ---tokens +{ +module Lexer where +} -.in -.out \ No newline at end of file +%wrapper "basic" +$digit = 0-9 +$alpha = [a-zA-Z] + + +tokens :- + $white+ ; + "--".* ; + Filter {\s -> TokenFilter } + SetName {\s -> TokenSetName s } + Func {\s -> TokenFunc } + Nat {\s -> TokenNat (read s) } + VarName {\s -> TokenVarName s } + Record {\s -> TokenRecord } + true {\s -> TokenTrue } + false {\s -> TokenFalse } + String {\s -> TokenString s } + '[' {\s -> TokenLeftSqBracket } + ']' {\s -> TokenRightSqBracket } + "->" {\s -> TokenArrow } + "==" {\s -> TokenisEqual } + "/=" {\s -> TokenisNotEqual } + '(' {\s -> TokenLeftBracket } + ')' {\s -> TokenRightBracket } + ';' {\s -> TokenApp } + '\\' {\s -> TokenLambda } + ',' {\s -> TokenComma } + '.' {\s -> TokenFullstop } + in {\s -> TokenInSet } + out {\s -> TokenOutSet } + $digit $digit+ {(\p s -> TokenInt p (read s))} + $alpha [$alpha $digit \_ \’]* { \p s -> TokenVar p s } +{ +--token type: +data Token = + TokenFilter | + TokenSetName String | + TokenFunc | + TokenNat Int | + TokenVarName String | + TokenRecord | + TokenTrue | + TokenFalse | + TokenString String | + TokenLeftSqBracket | + TokenRightSqBracket | + TokenArrow | + TokenisEqual | + TokenisNotEqual | + TokenLeftBracket | + TokenRightBracket | + TokenApp | + TokenLambda | + TokenComma | + TokenFullStop | + TokenInSet | + TokenOutSet + deriving (Eq, Show) + + +} diff --git a/Parser.y b/Parser.y index 112432f070447c55f03076f56a654787028e6442..475ab1c9178dd745a31ca925b5aade0641ed617e 100644 --- a/Parser.y +++ b/Parser.y @@ -10,7 +10,7 @@ SetSetFuncCalls : SetFuncCall {[SetFuncCall]} | SetFuncCall; SetFuncCalls {SetFuncCall:SetFuncCalls} SetFuncCall : filter '['SetName']' (Func) - +--filter[A](\r -> r[2] /= "") Func : \'('VarNames')' -> Expr \(r) -> r[1] == "hello" @@ -25,4 +25,5 @@ Expr : Expr == Expr Record : '['Exprs']' Exprs : Expr - | Expr','Exprs + | Expr','Exprs +