Mercurial > python-compiler.rs
view src/python_ast.rs @ 9:fa7e285f88e7
Add a scoping pass, associating each module/statement with a block.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 01 Jun 2016 22:17:28 +0100 |
parents | 94ff501bf336 |
children | 38b0d63697b1 |
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<String>, 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 }