enum Token {
If,
Else,
Var(i32),
Semi,
LParen,
RParen,
}
type Span = ();
enum Expr {
Var(i32),
}
enum Statement {
If(Expr, Box<Statement>),
IfElse(Expr, Box<Statement>, Box<Statement>),
}
#[allow(unused_imports)]
use self::Token::*;
plex::parser! {
fn parse_(Token, Span);
statements: Vec<Statement> {
=> vec![],
statements[mut st] statement[e] Semi => {
st.push(e);
st
}
}
statement: Statement {
If LParen expr[head] RParen statement[then] => Statement::If(
head,
Box::new(then),
),
If LParen expr[head] RParen statement[then] Else statement[else_] => Statement::IfElse(
head,
Box::new(then),
Box::new(else_),
),
}
expr: Expr {
Var(i) => Expr::Var(i),
}
}
fn main() {
}