view src/python_ast.rs @ 8:94ff501bf336

Add ast.AugAssign.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Tue, 31 May 2016 04:34:42 +0100
parents 680d15073f55
children fa7e285f88e7
line wrap: on
line source

#[derive(Clone, Debug)]
pub struct Module {
    pub name: String,
    pub statements: Vec<Statement>,
}

#[derive(Clone, Debug)]
pub enum Statement {
    ClassDef(String, Vec<Expr>, Vec<Statement>),
    FunctionDef(String, Vec<Expr>, Vec<Statement>),
    Global(Vec<String>),
    If(Expr, Vec<Statement>, Vec<Statement>),
    For(Expr, Expr, Vec<Statement>, Vec<Statement>),
    While(Expr, Vec<Statement>, Vec<Statement>),
    Assign(Vec<Expr>, Expr),
    AugAssign(Expr, BinOp, Expr),
    Return(Expr),
    ImportFrom(String, Vec<Expr>),
    Expr(Expr),
    Break,
    Error
}

#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum Expr {
    UnaryOp(UnaryOp, Box<Expr>),
    BinOp(Box<Expr>, BinOp, Box<Expr>),
    Compare(Box<Expr>, Vec<BinOp>, Vec<Expr>),
    Call(Box<Expr>, Vec<Expr>),
    Alias(String, Option<String>),
    Attribute(Box<Expr>, String),
    Name(String),
    NameConstant(String),
    Str(String),
    Num(String),
    List(Vec<Expr>),
    Error
}

#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum UnaryOp {
    UAdd,
    USub,
    Error
}

#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum BinOp {
    BinAdd,
    BinMult,
    BinEq,
    BinLt,
    BinGt,
    Sub,
    Div,
    Error
}