use core; use core::Expr::*; use grammar_util::*; use lexer::{Builtin, Keyword, LexicalError, Tok}; grammar; extern { type Location = usize; type Error = LexicalError; enum Tok { Pi => Tok::Pi, Lambda => Tok::Lambda, Combine => Tok::Combine, "->" => Tok::Arrow, Int => Tok::Integer(), Nat => Tok::Natural(), Bool => Tok::Bool(), Label => Tok::Identifier(), Let => Tok::Keyword(Keyword::Let), In => Tok::Keyword(Keyword::In), If => Tok::Keyword(Keyword::If), Then => Tok::Keyword(Keyword::Then), Else => Tok::Keyword(Keyword::Else), Builtin => Tok::Builtin(), "(" => Tok::ParenL, ")" => Tok::ParenR, "&&" => Tok::BoolAnd, "||" => Tok::BoolOr, "==" => Tok::CompareEQ, "!=" => Tok::CompareNE, "++" => Tok::Append, "*" => Tok::Times, "+" => Tok::Plus, "." => Tok::Dot, ":" => Tok::Ascription, "=" => Tok::Equals, } } pub Expr: BoxExpr = { // exprA ":" => bx(Annot(<>)), ExprB, }; ExprB: BoxExpr = { Lambda "("