Parser changes - add precedences, move definitions
Move impls of Display for AST subtypes closer to where they are defined
This commit is contained in:
parent
7eb48fb4ef
commit
4a7b570603
@ -20,12 +20,24 @@ use std::collections::VecDeque;
|
||||
// op := '+', '-', etc.
|
||||
//
|
||||
|
||||
pub type AST = Vec<Statement>;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Statement {
|
||||
ExprNode(Expression),
|
||||
FuncDefNode(Function),
|
||||
}
|
||||
|
||||
impl fmt::Display for Statement {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
use self::Statement::*;
|
||||
match *self {
|
||||
ExprNode(ref expr) => write!(f, "{}", expr),
|
||||
FuncDefNode(_) => write!(f, "UNIMPLEMENTED"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Function {
|
||||
pub prototype: Prototype,
|
||||
@ -52,16 +64,6 @@ pub enum Expression {
|
||||
While(Box<Expression>, Vec<Expression>),
|
||||
}
|
||||
|
||||
impl fmt::Display for Statement {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
use self::Statement::*;
|
||||
match *self {
|
||||
ExprNode(ref expr) => write!(f, "{}", expr),
|
||||
FuncDefNode(_) => write!(f, "UNIMPLEMENTED"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Expression {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
use self::Expression::*;
|
||||
@ -77,8 +79,6 @@ impl fmt::Display for Expression {
|
||||
}
|
||||
}
|
||||
|
||||
pub type AST = Vec<Statement>;
|
||||
|
||||
type Precedence = u8;
|
||||
|
||||
// TODO make this support incomplete parses
|
||||
@ -126,6 +126,8 @@ impl Parser {
|
||||
"/" => 20,
|
||||
"%" => 20,
|
||||
"=" => 1,
|
||||
"==" => 40,
|
||||
">" | ">=" | "<" | "<=" => 30,
|
||||
_ => 255,
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user