17db96d56Sopenharmony_ci-- ASDL's 4 builtin types are:
27db96d56Sopenharmony_ci-- identifier, int, string, constant
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_cimodule Python
57db96d56Sopenharmony_ci{
67db96d56Sopenharmony_ci    mod = Module(stmt* body, type_ignore* type_ignores)
77db96d56Sopenharmony_ci        | Interactive(stmt* body)
87db96d56Sopenharmony_ci        | Expression(expr body)
97db96d56Sopenharmony_ci        | FunctionType(expr* argtypes, expr returns)
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci    stmt = FunctionDef(identifier name, arguments args,
127db96d56Sopenharmony_ci                       stmt* body, expr* decorator_list, expr? returns,
137db96d56Sopenharmony_ci                       string? type_comment)
147db96d56Sopenharmony_ci          | AsyncFunctionDef(identifier name, arguments args,
157db96d56Sopenharmony_ci                             stmt* body, expr* decorator_list, expr? returns,
167db96d56Sopenharmony_ci                             string? type_comment)
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci          | ClassDef(identifier name,
197db96d56Sopenharmony_ci             expr* bases,
207db96d56Sopenharmony_ci             keyword* keywords,
217db96d56Sopenharmony_ci             stmt* body,
227db96d56Sopenharmony_ci             expr* decorator_list)
237db96d56Sopenharmony_ci          | Return(expr? value)
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci          | Delete(expr* targets)
267db96d56Sopenharmony_ci          | Assign(expr* targets, expr value, string? type_comment)
277db96d56Sopenharmony_ci          | AugAssign(expr target, operator op, expr value)
287db96d56Sopenharmony_ci          -- 'simple' indicates that we annotate simple name without parens
297db96d56Sopenharmony_ci          | AnnAssign(expr target, expr annotation, expr? value, int simple)
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci          -- use 'orelse' because else is a keyword in target languages
327db96d56Sopenharmony_ci          | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
337db96d56Sopenharmony_ci          | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
347db96d56Sopenharmony_ci          | While(expr test, stmt* body, stmt* orelse)
357db96d56Sopenharmony_ci          | If(expr test, stmt* body, stmt* orelse)
367db96d56Sopenharmony_ci          | With(withitem* items, stmt* body, string? type_comment)
377db96d56Sopenharmony_ci          | AsyncWith(withitem* items, stmt* body, string? type_comment)
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci          | Match(expr subject, match_case* cases)
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci          | Raise(expr? exc, expr? cause)
427db96d56Sopenharmony_ci          | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
437db96d56Sopenharmony_ci          | TryStar(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
447db96d56Sopenharmony_ci          | Assert(expr test, expr? msg)
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci          | Import(alias* names)
477db96d56Sopenharmony_ci          | ImportFrom(identifier? module, alias* names, int? level)
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci          | Global(identifier* names)
507db96d56Sopenharmony_ci          | Nonlocal(identifier* names)
517db96d56Sopenharmony_ci          | Expr(expr value)
527db96d56Sopenharmony_ci          | Pass | Break | Continue
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci          -- col_offset is the byte offset in the utf8 string the parser uses
557db96d56Sopenharmony_ci          attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci          -- BoolOp() can use left & right?
587db96d56Sopenharmony_ci    expr = BoolOp(boolop op, expr* values)
597db96d56Sopenharmony_ci         | NamedExpr(expr target, expr value)
607db96d56Sopenharmony_ci         | BinOp(expr left, operator op, expr right)
617db96d56Sopenharmony_ci         | UnaryOp(unaryop op, expr operand)
627db96d56Sopenharmony_ci         | Lambda(arguments args, expr body)
637db96d56Sopenharmony_ci         | IfExp(expr test, expr body, expr orelse)
647db96d56Sopenharmony_ci         | Dict(expr* keys, expr* values)
657db96d56Sopenharmony_ci         | Set(expr* elts)
667db96d56Sopenharmony_ci         | ListComp(expr elt, comprehension* generators)
677db96d56Sopenharmony_ci         | SetComp(expr elt, comprehension* generators)
687db96d56Sopenharmony_ci         | DictComp(expr key, expr value, comprehension* generators)
697db96d56Sopenharmony_ci         | GeneratorExp(expr elt, comprehension* generators)
707db96d56Sopenharmony_ci         -- the grammar constrains where yield expressions can occur
717db96d56Sopenharmony_ci         | Await(expr value)
727db96d56Sopenharmony_ci         | Yield(expr? value)
737db96d56Sopenharmony_ci         | YieldFrom(expr value)
747db96d56Sopenharmony_ci         -- need sequences for compare to distinguish between
757db96d56Sopenharmony_ci         -- x < 4 < 3 and (x < 4) < 3
767db96d56Sopenharmony_ci         | Compare(expr left, cmpop* ops, expr* comparators)
777db96d56Sopenharmony_ci         | Call(expr func, expr* args, keyword* keywords)
787db96d56Sopenharmony_ci         | FormattedValue(expr value, int conversion, expr? format_spec)
797db96d56Sopenharmony_ci         | JoinedStr(expr* values)
807db96d56Sopenharmony_ci         | Constant(constant value, string? kind)
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci         -- the following expression can appear in assignment context
837db96d56Sopenharmony_ci         | Attribute(expr value, identifier attr, expr_context ctx)
847db96d56Sopenharmony_ci         | Subscript(expr value, expr slice, expr_context ctx)
857db96d56Sopenharmony_ci         | Starred(expr value, expr_context ctx)
867db96d56Sopenharmony_ci         | Name(identifier id, expr_context ctx)
877db96d56Sopenharmony_ci         | List(expr* elts, expr_context ctx)
887db96d56Sopenharmony_ci         | Tuple(expr* elts, expr_context ctx)
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci         -- can appear only in Subscript
917db96d56Sopenharmony_ci         | Slice(expr? lower, expr? upper, expr? step)
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci          -- col_offset is the byte offset in the utf8 string the parser uses
947db96d56Sopenharmony_ci          attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci    expr_context = Load | Store | Del
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci    boolop = And | Or
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci    operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift
1017db96d56Sopenharmony_ci                 | RShift | BitOr | BitXor | BitAnd | FloorDiv
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci    unaryop = Invert | Not | UAdd | USub
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci    cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci    comprehension = (expr target, expr iter, expr* ifs, int is_async)
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci    excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)
1107db96d56Sopenharmony_ci                    attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci    arguments = (arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs,
1137db96d56Sopenharmony_ci                 expr* kw_defaults, arg? kwarg, expr* defaults)
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci    arg = (identifier arg, expr? annotation, string? type_comment)
1167db96d56Sopenharmony_ci           attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci    -- keyword arguments supplied to call (NULL identifier for **kwargs)
1197db96d56Sopenharmony_ci    keyword = (identifier? arg, expr value)
1207db96d56Sopenharmony_ci               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci    -- import name with optional 'as' alias.
1237db96d56Sopenharmony_ci    alias = (identifier name, identifier? asname)
1247db96d56Sopenharmony_ci             attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci    withitem = (expr context_expr, expr? optional_vars)
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci    match_case = (pattern pattern, expr? guard, stmt* body)
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci    pattern = MatchValue(expr value)
1317db96d56Sopenharmony_ci            | MatchSingleton(constant value)
1327db96d56Sopenharmony_ci            | MatchSequence(pattern* patterns)
1337db96d56Sopenharmony_ci            | MatchMapping(expr* keys, pattern* patterns, identifier? rest)
1347db96d56Sopenharmony_ci            | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci            | MatchStar(identifier? name)
1377db96d56Sopenharmony_ci            -- The optional "rest" MatchMapping parameter handles capturing extra mapping keys
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci            | MatchAs(pattern? pattern, identifier? name)
1407db96d56Sopenharmony_ci            | MatchOr(pattern* patterns)
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci             attributes (int lineno, int col_offset, int end_lineno, int end_col_offset)
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci    type_ignore = TypeIgnore(int lineno, string tag)
1457db96d56Sopenharmony_ci}
146