Permalink
Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upβ¦ode for the AST (GH-19952)
| -- ASDL's 4 builtin types are: | |
| -- identifier, int, string, constant | |
| module Python | |
| { | |
| mod = Module(stmt* body, type_ignore* type_ignores) | |
| | Interactive(stmt* body) | |
| | Expression(expr body) | |
| | FunctionType(expr* argtypes, expr returns) | |
| stmt = FunctionDef(identifier name, arguments args, | |
| stmt* body, expr* decorator_list, expr? returns, | |
| string? type_comment) | |
| | AsyncFunctionDef(identifier name, arguments args, | |
| stmt* body, expr* decorator_list, expr? returns, | |
| string? type_comment) | |
| | ClassDef(identifier name, | |
| expr* bases, | |
| keyword* keywords, | |
| stmt* body, | |
| expr* decorator_list) | |
| | Return(expr? value) | |
| | Delete(expr* targets) | |
| | Assign(expr* targets, expr value, string? type_comment) | |
| | AugAssign(expr target, operator op, expr value) | |
| -- 'simple' indicates that we annotate simple name without parens | |
| | AnnAssign(expr target, expr annotation, expr? value, int simple) | |
| -- use 'orelse' because else is a keyword in target languages | |
| | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment) | |
| | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment) | |
| | While(expr test, stmt* body, stmt* orelse) | |
| | If(expr test, stmt* body, stmt* orelse) | |
| | With(withitem* items, stmt* body, string? type_comment) | |
| | AsyncWith(withitem* items, stmt* body, string? type_comment) | |
| | Raise(expr? exc, expr? cause) | |
| | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody) | |
| | Assert(expr test, expr? msg) | |
| | Import(alias* names) | |
| | ImportFrom(identifier? module, alias* names, int? level) | |
| | Global(identifier* names) | |
| | Nonlocal(identifier* names) | |
| | Expr(expr value) | |
| | Pass | Break | Continue | |
| -- col_offset is the byte offset in the utf8 string the parser uses | |
| attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) | |
| -- BoolOp() can use left & right? | |
| expr = BoolOp(boolop op, expr* values) | |
| | NamedExpr(expr target, expr value) | |
| | BinOp(expr left, operator op, expr right) | |
| | UnaryOp(unaryop op, expr operand) | |
| | Lambda(arguments args, expr body) | |
| | IfExp(expr test, expr body, expr orelse) | |
| | Dict(expr* keys, expr* values) | |
| | Set(expr* elts) | |
| | ListComp(expr elt, comprehension* generators) | |
| | SetComp(expr elt, comprehension* generators) | |
| | DictComp(expr key, expr value, comprehension* generators) | |
| | GeneratorExp(expr elt, comprehension* generators) | |
| -- the grammar constrains where yield expressions can occur | |
| | Await(expr value) | |
| | Yield(expr? value) | |
| | YieldFrom(expr value) | |
| -- need sequences for compare to distinguish between | |
| -- x < 4 < 3 and (x < 4) < 3 | |
| | Compare(expr left, cmpop* ops, expr* comparators) | |
| | Call(expr func, expr* args, keyword* keywords) | |
| | FormattedValue(expr value, int? conversion, expr? format_spec) | |
| | JoinedStr(expr* values) | |
| | Constant(constant value, string? kind) | |
| -- the following expression can appear in assignment context | |
| | Attribute(expr value, identifier attr, expr_context ctx) | |
| | Subscript(expr value, expr slice, expr_context ctx) | |
| | Starred(expr value, expr_context ctx) | |
| | Name(identifier id, expr_context ctx) | |
| | List(expr* elts, expr_context ctx) | |
| | Tuple(expr* elts, expr_context ctx) | |
| -- can appear only in Subscript | |
| | Slice(expr? lower, expr? upper, expr? step) | |
| -- col_offset is the byte offset in the utf8 string the parser uses | |
| attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) | |
| expr_context = Load | Store | Del | |
| boolop = And | Or | |
| operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | |
| | RShift | BitOr | BitXor | BitAnd | FloorDiv | |
| unaryop = Invert | Not | UAdd | USub | |
| cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn | |
| comprehension = (expr target, expr iter, expr* ifs, int is_async) | |
| excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body) | |
| attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) | |
| arguments = (arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, | |
| expr* kw_defaults, arg? kwarg, expr* defaults) | |
| arg = (identifier arg, expr? annotation, string? type_comment) | |
| attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) | |
| -- keyword arguments supplied to call (NULL identifier for **kwargs) | |
| keyword = (identifier? arg, expr value) | |
| attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) | |
| -- import name with optional 'as' alias. | |
| alias = (identifier name, identifier? asname) | |
| withitem = (expr context_expr, expr? optional_vars) | |
| type_ignore = TypeIgnore(int lineno, string tag) | |
| } |