{
module LambdaParse where
import Data.Char
import Lambda
import Lexer
}

%name parser
%tokentype { Token }

%token 
    id     { TokenIdent $$ }
    '\\'   { Symbol "\\" }
    '.'    { Symbol "." }
    '('    { Symbol "(" }
    ')'    { Symbol ")" }

%%

Exp  : Exp Prim       { App $1 $2 }
     | Prim            { $1 }

Prim : id               { Var $1 }
     | '\\' id '.' Exp { Abs $2 $4 }
     | '(' Exp ')'     { $2 }
     
{

symbols = [".", "\\", "(", ")"]
keywords = []
parseExp str = parser (lexer symbols keywords str)

parseInput = do
  input <- getContents
  print (parseExp input)

}