*** Running test-parse-all-tea tea/run.sh parse-one tea/testdata/file.tea 0 tea_module - 0 Op_Newline None 1 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 14 line: (SourceLine line_num: 9 content: 'import \'frontend/syntax\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 15 span_id: 15 line: (SourceLine line_num: 9 content: 'import \'frontend/syntax\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: 'frontend/syntax' ) ] right: (Token id: Id.Right_SingleQuote col: 23 length: 1 span_id: 16 line: (SourceLine line_num: 9 content: 'import \'frontend/syntax\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 end_import None 0 Op_Newline None 2 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 20 line: (SourceLine line_num: 10 content: 'import \'bar\' as foo\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 3 span_id: 21 line: (SourceLine line_num: 10 content: 'import \'bar\' as foo\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: bar ) ] right: (Token id: Id.Right_SingleQuote col: 11 length: 1 span_id: 22 line: (SourceLine line_num: 10 content: 'import \'bar\' as foo\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 Expr_As as 2 Expr_Name foo 3 end_import None 0 Op_Newline None 3 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 31 line: (SourceLine line_num: 12 content: 'import \'core/util\' (log, p_die, foo as bar)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 9 span_id: 32 line: (SourceLine line_num: 12 content: 'import \'core/util\' (log, p_die, foo as bar)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: 'core/util' ) ] right: (Token id: Id.Right_SingleQuote col: 17 length: 1 span_id: 33 line: (SourceLine line_num: 12 content: 'import \'core/util\' (log, p_die, foo as bar)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 Op_LParen None 2 import_names log 0 import_name log 0 Expr_Name log 1 comma_newline None 0 Arith_Comma None 2 import_name p_die 0 Expr_Name p_die 3 comma_newline None 0 Arith_Comma None 4 import_name foo 0 Expr_Name foo 1 Expr_As as 2 Expr_Name bar 3 Op_RParen None 4 end_import None 0 Op_Newline None 4 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 52 line: (SourceLine line_num: 14 content: 'import \'core/util\' as myutil (log as mylog)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 9 span_id: 53 line: (SourceLine line_num: 14 content: 'import \'core/util\' as myutil (log as mylog)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: 'core/util' ) ] right: (Token id: Id.Right_SingleQuote col: 17 length: 1 span_id: 54 line: (SourceLine line_num: 14 content: 'import \'core/util\' as myutil (log as mylog)\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 Expr_As as 2 Expr_Name myutil 3 Op_LParen None 4 import_names log 0 import_name log 0 Expr_Name log 1 Expr_As as 2 Expr_Name mylog 5 Op_RParen None 6 end_import None 0 Op_Newline None 5 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 71 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 3 span_id: 72 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: one ) ] right: (Token id: Id.Right_SingleQuote col: 11 length: 1 span_id: 73 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 end_import None 0 Op_Semi None 6 module_item import 0 Expr_Name import 1 tea_import ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 21 length: 1 span_id: 78 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 22 length: 3 span_id: 79 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: two ) ] right: (Token id: Id.Right_SingleQuote col: 25 length: 1 span_id: 80 line: (SourceLine line_num: 16 content: 'import \'one\'; import \'two\'\n' src: (source.MainFile path:'tea/testdata/file.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 end_import None 0 Op_Newline None 7 module_item var 0 Expr_Name var 1 name_type_list x 0 name_type x 0 Expr_Name x 2 Arith_Equal None 3 testlist 1 0 test 1 0 or_test 1 0 and_test 1 0 not_test 1 0 comparison 1 0 range_expr 1 0 expr 1 0 xor_expr 1 0 and_expr 1 0 shift_expr 1 0 arith_expr 1 0 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 1 Arith_Plus None 2 term 2 0 factor 2 0 power 2 0 atom 2 0 Expr_DecInt 2 1 Arith_Star None 2 factor 3 0 power 3 0 atom 3 0 Expr_DecInt 3 4 end_outer None 0 Op_Semi None 1 Op_Newline None 8 module_item var 0 Expr_Name var 1 name_type_list y 0 name_type y 0 Expr_Name y 2 Arith_Equal None 3 testlist a 0 test a 0 or_test a 0 and_test a 0 not_test a 0 comparison a 0 range_expr a 0 expr a 0 xor_expr a 0 and_expr a 0 shift_expr a 0 arith_expr a 0 term a 0 factor a 0 power a 0 atom a 0 Expr_Name a 1 trailer None 0 Op_LBracket None 1 subscriptlist i 0 subscript i 0 expr i 0 xor_expr i 0 and_expr i 0 shift_expr i 0 arith_expr i 0 term i 0 factor i 0 power i 0 atom i 0 Expr_Name i 2 Op_RBracket None 4 end_outer None 0 Op_Newline None 9 Eof_Real (command.CommandList children: [ (command.Import path:(SQ <'frontend/syntax'>) names:[]) (command.Import path:(SQ ) names:[]) (command.Import path:(SQ <'core/util'>) names:[]) (command.Import path:(SQ <'core/util'>) names:[]) (command.CommandList children: [ (command.Sentence child: (command.Import path:(SQ ) names:[]) terminator: ) (command.Import path:(SQ ) names:[]) ] ) (command.Sentence child: (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Binary op: left: (expr.Const c:) right: (expr.Binary op: left: (expr.Const c:) right: (expr.Const c:) ) ) ) terminator: ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (Subscript obj:(expr.Var name:) index:(expr.Var name:)) ) ] ) tea/run.sh parse-one tea/testdata/data-enum.tea 0 tea_module - 0 Op_Newline None 1 module_item data 0 Expr_Name data 1 tea_data Point 0 Expr_Name Point 1 Op_LParen None 2 data_params x 0 param x 0 Expr_Name x 1 type_expr Int 0 Expr_Name Int 1 Arith_Comma None 2 param y 0 Expr_Name y 1 type_expr Int 0 Expr_Name Int 3 Op_RParen None 2 end_outer None 0 Op_Newline None 2 module_item data 0 Expr_Name data 1 tea_data Point3 0 Expr_Name Point3 1 Op_LParen None 2 data_params x 0 param x 0 Expr_Name x 1 Arith_Comma None 2 param y 0 Expr_Name y 3 Arith_Comma None 4 param z 0 Expr_Name z 3 Op_RParen None 2 end_outer None 0 Op_Newline None 3 module_item data 0 Expr_Name data 1 tea_data one 0 Expr_Name one 1 Op_LParen None 2 data_params x 0 param x 0 Expr_Name x 3 Op_RParen None 2 end_outer None 0 Op_Semi None 4 module_item data 0 Expr_Name data 1 tea_data two 0 Expr_Name two 1 Op_LParen None 2 data_params y 0 param y 0 Expr_Name y 3 Op_RParen None 2 end_outer None 0 Op_Semi None 1 Op_Newline None 5 module_item enum 0 Expr_Name enum 1 tea_enum empty 0 Expr_Name empty 1 Op_LBrace None 2 Op_RBrace None 2 end_outer None 0 Op_Newline None 6 module_item enum 0 Expr_Name enum 1 tea_enum op 0 Expr_Name op 1 Op_LBrace None 2 variant Plus 0 Expr_Name Plus 3 comma_newline None 0 Arith_Comma None 4 variant Minus 0 Expr_Name Minus 5 Op_RBrace None 2 end_outer None 0 Op_Newline None 7 module_item enum 0 Expr_Name enum 1 tea_enum comma1 0 Expr_Name comma1 1 Op_LBrace None 2 Op_Newline None 3 variant Times 0 Expr_Name Times 4 comma_newline None 0 Arith_Comma None 1 Op_Newline None 5 variant Divide 0 Expr_Name Divide 6 comma_newline None 0 Op_Newline None 7 Op_RBrace None 2 end_outer None 0 Op_Newline None 8 module_item enum 0 Expr_Name enum 1 tea_enum trailing_comma 0 Expr_Name trailing_comma 1 Op_LBrace None 2 Op_Newline None 3 variant Times 0 Expr_Name Times 4 comma_newline None 0 Arith_Comma None 1 Op_Newline None 5 variant Divide 0 Expr_Name Divide 6 comma_newline None 0 Arith_Comma None 1 Op_Newline None 7 Op_RBrace None 2 end_outer None 0 Op_Newline None 9 module_item enum 0 Expr_Name enum 1 tea_enum no_comma 0 Expr_Name no_comma 1 Op_LBrace None 2 Op_Newline None 3 variant Times 0 Expr_Name Times 4 comma_newline None 0 Op_Newline None 5 variant Divide 0 Expr_Name Divide 6 comma_newline None 0 Op_Newline None 7 Op_RBrace None 2 end_outer None 0 Op_Newline None 10 module_item enum 0 Expr_Name enum 1 tea_enum cflow 0 Expr_Name cflow 1 Op_LBrace None 2 Op_Newline None 3 variant Break 0 Expr_Name Break 4 comma_newline None 0 Arith_Comma None 5 variant Continue 0 Expr_Name Continue 6 comma_newline None 0 Arith_Comma None 7 variant Return 0 Expr_Name Return 1 variant_type None 0 Op_LParen None 1 data_params status 0 param status 0 Expr_Name status 1 type_expr Int 0 Expr_Name Int 2 Op_RParen None 8 comma_newline None 0 Op_Newline None 9 Op_RBrace None 2 end_outer None 0 Op_Newline None 11 module_item data 0 Expr_Name data 1 tea_data Token 0 Expr_Name Token 1 Op_LParen None 2 data_params id 0 param id 0 Expr_Name id 1 type_expr Id 0 Expr_Name Id 1 Arith_Comma None 2 param span_id 0 Expr_Name span_id 1 type_expr Int 0 Expr_Name Int 3 Arith_Comma None 4 param val 0 Expr_Name val 1 type_expr Str 0 Expr_Name Str 3 Op_RParen None 2 end_outer None 0 Op_Newline None 12 module_item enum 0 Expr_Name enum 1 tea_enum suffix_op 0 Expr_Name suffix_op 1 Op_LBrace None 2 Op_Newline None 3 variant Nullary 0 Expr_Name Nullary 1 variant_type %Token 0 Expr_Symbol %Token 4 comma_newline None 0 Arith_Comma None 1 Op_Newline None 5 variant Unary 0 Expr_Name Unary 1 variant_type None 0 Op_LParen None 1 data_params op_id 0 param op_id 0 Expr_Name op_id 1 type_expr Id 0 Expr_Name Id 1 Arith_Comma None 2 param arg_word 0 Expr_Name arg_word 1 type_expr Str 0 Expr_Name Str 2 Op_RParen None 6 comma_newline None 0 Op_Newline None 7 Op_RBrace None 2 end_outer None 0 Op_Newline None 13 module_item data 0 Expr_Name data 1 tea_data word 0 Expr_Name word 1 Op_LParen None 2 data_params parts 0 param parts 0 Expr_Name parts 1 type_expr Array 0 Expr_Name Array 1 Op_LBracket None 2 type_expr WordPart 0 Expr_Name WordPart 3 Op_RBracket None 3 Op_RParen None 2 end_outer None 0 Op_Newline None 14 module_item enum 0 Expr_Name enum 1 tea_enum value 0 Expr_Name value 1 Op_LBrace None 2 Op_Newline None 3 variant Str 0 Expr_Name Str 1 variant_type None 0 Op_LParen None 1 data_params s 0 param s 0 Expr_Name s 1 type_expr Str 0 Expr_Name Str 2 Op_RParen None 4 comma_newline None 0 Arith_Comma None 1 Op_Newline None 5 variant AssocArray 0 Expr_Name AssocArray 1 variant_type None 0 Op_LParen None 1 data_params d 0 param d 0 Expr_Name d 1 type_expr Map 0 Expr_Name Map 1 Op_LBracket None 2 type_expr Str 0 Expr_Name Str 3 Arith_Comma None 4 type_expr Str 0 Expr_Name Str 5 Op_RBracket None 2 Op_RParen None 6 comma_newline None 0 Op_Newline None 7 Op_RBrace None 2 end_outer None 0 Op_Newline None 15 Eof_Real (command.CommandList children: [ (command.Data name: params: [ (Param blame_tok: name: x type: (TypeExpr tok: name:Int) ) (Param blame_tok: name: y type: (TypeExpr tok: name:Int) ) ] ) (command.Data name: params: [ (Param blame_tok: name:x) (Param blame_tok: name:y) (Param blame_tok: name:z) ] ) (command.CommandList children: [ (command.Sentence child: (command.Data name: params: [(Param blame_tok: name:x)] ) terminator: ) (command.Sentence child: (command.Data name: params: [(Param blame_tok: name:y)] ) terminator: ) ] ) (command.Enum name: variants:[]) (command.Enum name: variants: [(Variant tag_name:) (Variant tag_name:)] ) (command.Enum name: variants: [(Variant tag_name:) (Variant tag_name:)] ) (command.Enum name: variants: [(Variant tag_name:) (Variant tag_name:)] ) (command.Enum name: variants: [(Variant tag_name:) (Variant tag_name:)] ) (command.Enum name: variants: [ (Variant tag_name:) (Variant tag_name:) (Variant tag_name: typ: (variant_type.Anon params: [ (Param blame_tok: name: status type: (TypeExpr tok: name:Int) ) ] ) ) ] ) (command.Data name: params: [ (Param blame_tok: name: id type: (TypeExpr tok: name:Id) ) (Param blame_tok: name: span_id type: (TypeExpr tok: name:Int) ) (Param blame_tok: name: val type: (TypeExpr tok: name:Str) ) ] ) (command.Enum name: variants: [ (Variant tag_name: typ: (variant_type.Ref type_name:) ) (Variant tag_name: typ: (variant_type.Anon params: [ (Param blame_tok: name: op_id type: (TypeExpr tok: name:Id) ) (Param blame_tok: name: arg_word type: (TypeExpr tok: name:Str) ) ] ) ) ] ) (command.Data name: params: [ (Param blame_tok: name: parts type: (TypeExpr tok: name: Array params: [(TypeExpr tok: name:WordPart)] ) ) ] ) (command.Enum name: variants: [ (Variant tag_name: typ: (variant_type.Anon params: [ (Param blame_tok: name: s type: (TypeExpr tok: name:Str) ) ] ) ) (Variant tag_name: typ: (variant_type.Anon params: [ (Param blame_tok: name: d type: (TypeExpr tok: name: Map params: [ (TypeExpr tok: name:Str) (TypeExpr tok: name:Str) ] ) ) ] ) ) ] ) ] ) tea/run.sh parse-one tea/testdata/func.tea 0 tea_module - 0 Op_Newline None 1 module_item func 0 Expr_Func func 1 Expr_Name add 2 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 1 Arith_Comma None 2 param y 0 Expr_Name y 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 func_items return 0 func_item return 0 Expr_Return return 1 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Plus None 2 term y 0 factor y 0 power y 0 atom y 0 Expr_Name y 2 Op_RBrace None 3 end_outer None 0 Op_Newline None 2 module_item func 0 Expr_Func func 1 Expr_Name add 2 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 1 Arith_Comma None 2 param y 0 Expr_Name y 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 func_items return 0 func_item return 0 Expr_Return return 1 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Plus None 2 term y 0 factor y 0 power y 0 atom y 0 Expr_Name y 1 semi_newline None 0 Op_Newline None 2 Op_RBrace None 3 end_outer None 0 Op_Newline None 3 module_item func 0 Expr_Func func 1 Expr_Name stmt_semicolon 2 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 1 Arith_Comma None 2 param y 0 Expr_Name y 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 func_items var 0 func_item var 0 Expr_Name var 1 name_type_list z 0 name_type z 0 Expr_Name z 2 Arith_Equal None 3 testlist 32 0 test 32 0 or_test 32 0 and_test 32 0 not_test 32 0 comparison 32 0 range_expr 32 0 expr 32 0 xor_expr 32 0 and_expr 32 0 shift_expr 32 0 arith_expr 32 0 term 32 0 factor 32 0 power 32 0 atom 32 0 Expr_DecInt 32 1 semi_newline None 0 Op_Semi None 2 func_item return 0 Expr_Return return 1 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Plus None 2 term y 0 factor y 0 power y 0 atom y 0 Expr_Name y 3 Arith_Plus None 4 term z 0 factor z 0 power z 0 atom z 0 Expr_Name z 2 Op_RBrace None 3 end_outer None 0 Op_Newline None 4 module_item func 0 Expr_Func func 1 Expr_Name stmt_newline 2 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 1 Arith_Comma None 2 param y 0 Expr_Name y 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items var 0 func_item var 0 Expr_Name var 1 name_type_list d 0 name_type d 0 Expr_Name d 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBracket None 1 testlist_comp 42 0 test 42 0 or_test 42 0 and_test 42 0 not_test 42 0 comparison 42 0 range_expr 42 0 expr 42 0 xor_expr 42 0 and_expr 42 0 shift_expr 42 0 arith_expr 42 0 term 42 0 factor 42 0 power 42 0 atom 42 0 Expr_DecInt 42 2 Op_RBracket None 1 semi_newline None 0 Op_Newline None 2 func_item set 0 Expr_Name set 1 place_list d 0 expr d 0 xor_expr d 0 and_expr d 0 shift_expr d 0 arith_expr d 0 term d 0 factor d 0 power d 0 atom d 0 Expr_Name d 1 trailer None 0 Op_LBracket None 1 subscriptlist 0 0 subscript 0 0 expr 0 0 xor_expr 0 0 and_expr 0 0 shift_expr 0 0 arith_expr 0 0 term 0 0 factor 0 0 power 0 0 atom 0 0 Expr_DecInt 0 2 Op_RBracket None 2 Arith_Equal None 3 testlist 5 0 test 5 0 or_test 5 0 and_test 5 0 not_test 5 0 comparison 5 0 range_expr 5 0 expr 5 0 xor_expr 5 0 and_expr 5 0 shift_expr 5 0 arith_expr 5 0 term 5 0 factor 5 0 power 5 0 atom 5 0 Expr_DecInt 5 3 semi_newline None 0 Op_Newline None 4 func_item return 0 Expr_Return return 1 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Plus None 2 term y 0 factor y 0 power y 0 atom y 0 Expr_Name y 3 Arith_Plus None 4 term z 0 factor z 0 power z 0 atom z 0 Expr_Name z 5 semi_newline None 0 Op_Newline None 3 Op_RBrace None 3 end_outer None 0 Op_Newline None 5 module_item func 0 Expr_Func func 1 Expr_Name empty 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_RBrace None 3 end_outer None 0 Op_Newline None 6 module_item func 0 Expr_Func func 1 Expr_Name empty2 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 Op_RBrace None 3 end_outer None 0 Op_Newline None 7 module_item func 0 Expr_Func func 1 Expr_Name proclike 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 tea_word ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 183 line: (SourceLine line_num: 28 content: ' echo \'hi\'\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 2 span_id: 184 line: (SourceLine line_num: 28 content: ' echo \'hi\'\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: hi ) ] right: (Token id: Id.Right_SingleQuote col: 10 length: 1 span_id: 185 line: (SourceLine line_num: 28 content: ' echo \'hi\'\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 semi_newline None 0 Op_Newline None 2 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 tea_word ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 190 line: (SourceLine line_num: 29 content: ' echo \'hi\';\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 2 span_id: 191 line: (SourceLine line_num: 29 content: ' echo \'hi\';\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: hi ) ] right: (Token id: Id.Right_SingleQuote col: 10 length: 1 span_id: 192 line: (SourceLine line_num: 29 content: ' echo \'hi\';\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 3 semi_newline None 0 Op_Semi None 1 Op_Newline None 4 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 tea_word ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 199 line: (SourceLine line_num: 31 content: ' echo \'hi\' $there;\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 2 span_id: 200 line: (SourceLine line_num: 31 content: ' echo \'hi\' $there;\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: hi ) ] right: (Token id: Id.Right_SingleQuote col: 10 length: 1 span_id: 201 line: (SourceLine line_num: 31 content: ' echo \'hi\' $there;\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 2 tea_word $there 0 simple_var_sub $there 0 VSub_DollarName $there 5 semi_newline None 0 Op_Semi None 1 Op_Newline None 6 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 tea_word ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 7 length: 1 span_id: 209 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 8 length: 2 span_id: 210 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: hi ) ] right: (Token id: Id.Right_SingleQuote col: 10 length: 1 span_id: 211 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 2 tea_word $there 0 simple_var_sub $there 0 VSub_DollarName $there 3 tea_word " 0 dq_string " 0 Left_DoubleQuote " 1 Expr_CastedDummy (DoubleQuoted left: (Token id: Id.Left_DoubleQuote col: 19 length: 1 span_id: 215 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '"' ) parts: [ (Token id: Id.Lit_Chars col: 20 length: 6 span_id: 216 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: double ) ] right: (Token id: Id.Right_DoubleQuote col: 26 length: 1 span_id: 217 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '"' ) ) 2 Right_DoubleQuote " 4 tea_word ${ 0 braced_var_sub ${ 0 Left_DollarBrace ${ 1 Expr_CastedDummy (BracedVarSub left: (Token id: Id.Left_DollarBrace col: 28 length: 2 span_id: 219 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '${' ) token: (Token id: Id.VSub_Name col: 30 length: 1 span_id: 220 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: x ) var_name: x right: (Token id: Id.Right_DollarBrace col: 31 length: 1 span_id: 221 line: (SourceLine line_num: 32 content: ' echo \'hi\' $there "double" ${x};\n' src: (source.MainFile path:'tea/testdata/func.tea') ) tval: '}' ) ) 2 Right_DollarBrace } 7 semi_newline None 0 Op_Semi None 1 Op_Newline None 3 Op_RBrace None 3 end_outer None 0 Op_Newline None 8 module_item var 0 Expr_Name var 1 name_type_list f1 0 name_type f1 0 Expr_Name f1 2 Arith_Equal None 3 testlist func 0 test func 0 or_test func 0 and_test func 0 not_test func 0 comparison func 0 range_expr func 0 expr func 0 xor_expr func 0 and_expr func 0 shift_expr func 0 arith_expr func 0 term func 0 factor func 0 power func 0 atom func 0 Expr_Func func 1 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 func_items return 0 func_item return 0 Expr_Return return 1 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Plus None 2 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 2 Op_RBrace None 4 end_outer None 0 Op_Newline None 9 Eof_Real (command.CommandList children: [ (command.TeaFunc name: pos_params: [(Param blame_tok: name:x) (Param blame_tok: name:y)] named_params: [] return_types: [] body: (command.CommandList children: [ (command.Return value: (expr.Binary op: left: (expr.Var name:) right: (expr.Var name:) ) ) ] ) ) (command.TeaFunc name: pos_params: [(Param blame_tok: name:x) (Param blame_tok: name:y)] named_params: [] return_types: [] body: (command.CommandList children: [ (command.Return value: (expr.Binary op: left: (expr.Var name:) right: (expr.Var name:) ) ) ] ) ) (command.TeaFunc name: pos_params: [(Param blame_tok: name:x) (Param blame_tok: name:y)] named_params: [] return_types: [] body: (command.CommandList children: [ (command__NoOp) (command.Return value: (expr.Binary op: left: (expr.Binary op: left: (expr.Var name:) right: (expr.Var name:) ) right: (expr.Var name:) ) ) ] ) ) (command.TeaFunc name: pos_params: [(Param blame_tok: name:x) (Param blame_tok: name:y)] named_params: [] return_types: [] body: (command.CommandList children: [ (command__NoOp) (command__NoOp) (command.Return value: (expr.Binary op: left: (expr.Binary op: left: (expr.Var name:) right: (expr.Var name:) ) right: (expr.Var name:) ) ) ] ) ) (command.TeaFunc name: pos_params: [] named_params: [] return_types: [] body: (command.CommandList children:[]) ) (command.TeaFunc name: pos_params: [] named_params: [] return_types: [] body: (command.CommandList children:[]) ) (command.TeaFunc name: pos_params: [] named_params: [] return_types: [] body: (command.CommandList children: [(command__NoOp) (command__NoOp) (command__NoOp) (command__NoOp)] ) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Lambda params:[] body:(expr__Implicit)) ) ] ) tea/run.sh parse-one tea/testdata/loops.tea 0 tea_module - 0 Op_Newline None 1 module_item func 0 Expr_Func func 1 Expr_Name main 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items while 0 func_item while 0 Expr_While while 1 test 0 0 or_test 0 0 and_test 0 0 not_test 0 0 comparison 0 0 range_expr 0 0 expr 0 0 xor_expr 0 0 and_expr 0 0 shift_expr 0 0 arith_expr 0 0 term 0 0 factor 0 0 power 0 0 atom 0 0 Expr_DecInt 0 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items break 0 func_item break 0 Expr_Break break 1 semi_newline None 0 Op_Semi None 1 Op_Newline None 3 Op_RBrace None 1 semi_newline None 0 Op_Newline None 2 func_item for 0 Expr_For for 1 name_type_list item 0 name_type item 0 Expr_Name item 2 Expr_In in 3 test items 0 or_test items 0 and_test items 0 not_test items 0 comparison items 0 range_expr items 0 expr items 0 xor_expr items 0 and_expr items 0 shift_expr items 0 arith_expr items 0 term items 0 factor items 0 power items 0 atom items 0 Expr_Name items 4 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items continue 0 func_item continue 0 Expr_Continue continue 1 semi_newline None 0 Op_Semi None 1 Op_Newline None 3 Op_RBrace None 3 semi_newline None 0 Op_Newline None 4 func_item for 0 Expr_For for 1 name_type_list x 0 name_type x 0 Expr_Name x 1 type_expr Int 0 Expr_Name Int 1 Arith_Comma None 2 name_type y 0 Expr_Name y 1 type_expr Int 0 Expr_Name Int 2 Expr_In in 3 test pairs 0 or_test pairs 0 and_test pairs 0 not_test pairs 0 comparison pairs 0 range_expr pairs 0 expr pairs 0 xor_expr pairs 0 and_expr pairs 0 shift_expr pairs 0 arith_expr pairs 0 term pairs 0 factor pairs 0 power pairs 0 atom pairs 0 Expr_Name pairs 4 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items return 0 func_item return 0 Expr_Return return 1 testlist 1 0 test 1 0 or_test 1 0 and_test 1 0 not_test 1 0 comparison 1 0 range_expr 1 0 expr 1 0 xor_expr 1 0 and_expr 1 0 shift_expr 1 0 arith_expr 1 0 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 1 Arith_Plus None 2 term 2 0 factor 2 0 power 2 0 atom 2 0 Expr_DecInt 2 1 Arith_Star None 2 factor 3 0 power 3 0 atom 3 0 Expr_DecInt 3 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 5 semi_newline None 0 Op_Newline None 3 Op_RBrace None 3 end_outer None 0 Op_Newline None 2 Eof_Real (command.TeaFunc name: pos_params: [] named_params: [] return_types: [] body: (command.CommandList children: [ (command.While test: (expr.Const c:) body: (command.CommandList children:[(command__Break)]) ) (command.For targets: [(NameType name:)] iterable: (expr.Var name:) body: (command.CommandList children:[(command__Continue)]) ) (command.For targets: [ (NameType name: typ: (TypeExpr tok: name:Int) ) (NameType name: typ: (TypeExpr tok: name:Int) ) ] iterable: (expr.Var name:) body: (command.CommandList children: [ (command.Return value: (expr.Binary op: left: (expr.Const c:) right: (expr.Binary op: left: (expr.Const c:) right: (expr.Const c:) ) ) ) ] ) ) ] ) ) tea/run.sh parse-one tea/testdata/dict.tea 0 tea_module - 0 Op_Newline None 1 module_item var 0 Expr_Name var 1 name_type_list d1 0 name_type d1 0 Expr_Name d1 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 Op_RBrace None 4 end_outer None 0 Op_Newline None 2 module_item var 0 Expr_Name var 1 name_type_list d2 0 name_type d2 0 Expr_Name d2 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_RBrace None 4 end_outer None 0 Op_Newline None 3 module_item var 0 Expr_Name var 1 name_type_list d3 0 name_type d3 0 Expr_Name d3 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 16 length: 1 span_id: 33 line: (SourceLine line_num: 7 content: 'var d3 = {name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 17 length: 3 span_id: 34 line: (SourceLine line_num: 7 content: 'var d3 = {name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 20 length: 1 span_id: 35 line: (SourceLine line_num: 7 content: 'var d3 = {name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 2 Op_RBrace None 4 end_outer None 0 Op_Newline None 4 module_item var 0 Expr_Name var 1 name_type_list d4 0 name_type d4 0 Expr_Name d4 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 8 length: 1 span_id: 51 line: (SourceLine line_num: 10 content: ' name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 9 length: 3 span_id: 52 line: (SourceLine line_num: 10 content: ' name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 12 length: 1 span_id: 53 line: (SourceLine line_num: 10 content: ' name: \'bob\'}\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 3 Op_RBrace None 4 end_outer None 0 Op_Newline None 5 module_item var 0 Expr_Name var 1 name_type_list d5 0 name_type d5 0 Expr_Name d5 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 16 length: 1 span_id: 67 line: (SourceLine line_num: 12 content: 'var d5 = {name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 17 length: 3 span_id: 68 line: (SourceLine line_num: 12 content: 'var d5 = {name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 20 length: 1 span_id: 69 line: (SourceLine line_num: 12 content: 'var d5 = {name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 comma_newline None 0 Op_Newline None 2 Op_RBrace None 4 end_outer None 0 Op_Newline None 6 module_item var 0 Expr_Name var 1 name_type_list d6 0 name_type d6 0 Expr_Name d6 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 16 length: 1 span_id: 83 line: (SourceLine line_num: 14 content: 'var d6 = {name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 17 length: 3 span_id: 84 line: (SourceLine line_num: 14 content: 'var d6 = {name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 20 length: 1 span_id: 85 line: (SourceLine line_num: 14 content: 'var d6 = {name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 comma_newline None 0 Arith_Comma None 1 Op_Newline None 2 Op_RBrace None 4 end_outer None 0 Op_Newline None 7 module_item var 0 Expr_Name var 1 name_type_list commas0 0 name_type commas0 0 Expr_Name commas0 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 8 length: 1 span_id: 103 line: (SourceLine line_num: 18 content: ' name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 9 length: 3 span_id: 104 line: (SourceLine line_num: 18 content: ' name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 12 length: 1 span_id: 105 line: (SourceLine line_num: 18 content: ' name: \'bob\'\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 comma_newline None 0 Op_Newline None 2 dict_pair age 0 Expr_Name age 1 Arith_Colon None 2 test 10 0 or_test 10 0 and_test 10 0 not_test 10 0 comparison 10 0 range_expr 10 0 expr 10 0 xor_expr 10 0 and_expr 10 0 shift_expr 10 0 arith_expr 10 0 term 10 0 factor 10 0 power 10 0 atom 10 0 Expr_DecInt 10 3 comma_newline None 0 Op_Newline None 3 Op_RBrace None 4 end_outer None 0 Op_Newline None 8 module_item var 0 Expr_Name var 1 name_type_list commas1 0 name_type commas1 0 Expr_Name commas1 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 8 length: 1 span_id: 127 line: (SourceLine line_num: 22 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 9 length: 3 span_id: 128 line: (SourceLine line_num: 22 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 12 length: 1 span_id: 129 line: (SourceLine line_num: 22 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 comma_newline None 0 Arith_Comma None 1 Op_Newline None 2 dict_pair age 0 Expr_Name age 1 Arith_Colon None 2 test 10 0 or_test 10 0 and_test 10 0 not_test 10 0 comparison 10 0 range_expr 10 0 expr 10 0 xor_expr 10 0 and_expr 10 0 shift_expr 10 0 arith_expr 10 0 term 10 0 factor 10 0 power 10 0 atom 10 0 Expr_DecInt 10 3 comma_newline None 0 Op_Newline None 3 Op_RBrace None 4 end_outer None 0 Op_Newline None 9 module_item var 0 Expr_Name var 1 name_type_list commas2 0 name_type commas2 0 Expr_Name commas2 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 8 length: 1 span_id: 153 line: (SourceLine line_num: 27 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 9 length: 3 span_id: 154 line: (SourceLine line_num: 27 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: bob ) ] right: (Token id: Id.Right_SingleQuote col: 12 length: 1 span_id: 155 line: (SourceLine line_num: 27 content: ' name: \'bob\',\n' src: (source.MainFile path:'tea/testdata/dict.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 1 comma_newline None 0 Arith_Comma None 1 Op_Newline None 2 dict_pair age 0 Expr_Name age 1 Arith_Colon None 2 test 10 0 or_test 10 0 and_test 10 0 not_test 10 0 comparison 10 0 range_expr 10 0 expr 10 0 xor_expr 10 0 and_expr 10 0 shift_expr 10 0 arith_expr 10 0 term 10 0 factor 10 0 power 10 0 atom 10 0 Expr_DecInt 10 3 comma_newline None 0 Arith_Comma None 1 Op_Newline None 3 Op_RBrace None 4 end_outer None 0 Op_Newline None 10 module_item var 0 Expr_Name var 1 name_type_list lines 0 name_type lines 0 Expr_Name lines 2 Arith_Equal None 3 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LBrace None 1 Op_Newline None 2 dict name 0 dict_pair name 0 Expr_Name name 1 Arith_Colon None 2 test bob 0 or_test bob 0 and_test bob 0 not_test bob 0 comparison bob 0 range_expr bob 0 expr bob 0 xor_expr bob 0 and_expr bob 0 shift_expr bob 0 arith_expr bob 0 term bob 0 factor bob 0 power bob 0 atom bob 0 Expr_Name bob 1 comma_newline None 0 Op_Newline None 3 Op_RBrace None 4 end_outer None 0 Op_Newline None 11 Eof_Real (command.CommandList children: [ (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[] values:[]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[] values:[]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[(expr.Const c:)] values:[(SQ )]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[(expr.Const c:)] values:[(SQ )]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[(expr.Const c:)] values:[(SQ )]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys:[(expr.Const c:)] values:[(SQ )]) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys: [(expr.Const c:) (expr.Const c:)] values: [(SQ ) (expr.Const c:)] ) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys: [(expr.Const c:) (expr.Const c:)] values: [(SQ ) (expr.Const c:)] ) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys: [(expr.Const c:) (expr.Const c:)] values: [(SQ ) (expr.Const c:)] ) ) (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (expr.Dict keys: [(expr.Const c:)] values: [(expr.Var name:)] ) ) ] ) tea/run.sh parse-one tea/testdata/hello.tea 0 tea_module - 0 Op_Newline None 1 module_item var 0 Expr_Name var 1 name_type_list x 0 name_type x 0 Expr_Name x 2 Arith_Equal None 3 testlist ' 0 test ' 0 or_test ' 0 and_test ' 0 not_test ' 0 comparison ' 0 range_expr ' 0 expr ' 0 xor_expr ' 0 and_expr ' 0 shift_expr ' 0 arith_expr ' 0 term ' 0 factor ' 0 power ' 0 atom ' 0 sq_string ' 0 Left_SingleQuote ' 1 Expr_CastedDummy (SingleQuoted left: (Token id: Id.Left_SingleQuote col: 8 length: 1 span_id: 9 line: (SourceLine line_num: 3 content: 'var x = \'hello\'\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: '\'' ) tokens: [ (Token id: Id.Lit_Chars col: 9 length: 5 span_id: 10 line: (SourceLine line_num: 3 content: 'var x = \'hello\'\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: hello ) ] right: (Token id: Id.Right_SingleQuote col: 14 length: 1 span_id: 11 line: (SourceLine line_num: 3 content: 'var x = \'hello\'\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: '\'' ) ) 2 Right_SingleQuote ' 4 end_outer None 0 Op_Newline None 2 module_item func 0 Expr_Func func 1 Expr_Name main 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items while 0 func_item while 0 Expr_While while 1 test 0 0 or_test 0 0 and_test 0 0 not_test 0 0 comparison 0 0 range_expr 0 0 expr 0 0 xor_expr 0 0 and_expr 0 0 shift_expr 0 0 arith_expr 0 0 term 0 0 factor 0 0 power 0 0 atom 0 0 Expr_DecInt 0 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 tea_word " 0 dq_string " 0 Left_DoubleQuote " 1 Expr_CastedDummy (DoubleQuoted left: (Token id: Id.Left_DoubleQuote col: 9 length: 1 span_id: 32 line: (SourceLine line_num: 7 content: ' echo "$x"\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: '"' ) parts: [ (SimpleVarSub left: (Token id: Id.VSub_DollarName col: 10 length: 2 span_id: 33 line: (SourceLine line_num: 7 content: ' echo "$x"\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: '$x' ) var_name: x ) ] right: (Token id: Id.Right_DoubleQuote col: 12 length: 1 span_id: 34 line: (SourceLine line_num: 7 content: ' echo "$x"\n' src: (source.MainFile path:'tea/testdata/hello.tea') ) tval: '"' ) ) 2 Right_DoubleQuote " 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 3 end_outer None 0 Op_Newline None 3 Eof_Real (command.CommandList children: [ (command.VarDecl keyword: lhs: [(NameType name:)] rhs: (SQ ) ) (command.TeaFunc name: pos_params: [] named_params: [] return_types: [] body: (command.CommandList children: [ (command.While test: (expr.Const c:) body: (command.CommandList children:[(command__NoOp)]) ) ] ) ) ] ) tea/run.sh parse-one tea/testdata/class.tea 0 tea_module - 0 Op_Newline None 1 module_item class 0 Expr_Name class 1 tea_class empty 0 Expr_Name empty 1 Op_LBrace None 2 Op_RBrace None 2 end_outer None 0 Op_Newline None 2 module_item class 0 Expr_Name class 1 tea_class empty2 0 Expr_Name empty2 1 Op_LBrace None 2 Op_Newline None 3 Op_RBrace None 2 end_outer None 0 Op_Newline None 3 module_item class 0 Expr_Name class 1 tea_class Lexer 0 Expr_Name Lexer 1 Op_LBrace None 2 Op_Newline None 3 class_items func 0 class_item func 0 Expr_Func func 1 Expr_Name Run 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 1 semi_newline None 0 Op_Semi None 1 Op_Newline None 2 class_item virtual 0 Expr_Virtual virtual 1 Expr_Name Foo 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 3 semi_newline None 0 Op_Newline None 4 Op_RBrace None 2 end_outer None 0 Op_Newline None 4 module_item class 0 Expr_Name class 1 tea_class FileReader 0 Expr_Name FileReader 1 Arith_Colon None 2 Expr_Name Reader 3 Op_LBrace None 4 Op_Newline None 5 class_items var 0 class_item var 0 Expr_Name var 1 name_type_list x 0 name_type x 0 Expr_Name x 1 type_expr Int 0 Expr_Name Int 1 semi_newline None 0 Op_Newline None 2 class_item var 0 Expr_Name var 1 name_type_list y 0 name_type y 0 Expr_Name y 3 semi_newline None 0 Op_Newline None 4 class_item var 0 Expr_Name var 1 name_type_list a 0 name_type a 0 Expr_Name a 1 type_expr Float 0 Expr_Name Float 5 semi_newline None 0 Op_Semi None 6 class_item var 0 Expr_Name var 1 name_type_list b 0 name_type b 0 Expr_Name b 7 semi_newline None 0 Op_Semi None 1 Op_Newline None 8 class_item func 0 Expr_Func func 1 Expr_Name init 2 tea_func None 0 Op_LParen None 1 param_group super 0 param super 0 Expr_Name super 1 Arith_Comma None 2 param x 0 Expr_Name x 3 Arith_Comma None 4 param y 0 Expr_Name y 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 semi_newline None 0 Op_Newline None 3 Op_RBrace None 9 semi_newline None 0 Op_Newline None 10 class_item override 0 Expr_Override override 1 Expr_Name Run 2 tea_func None 0 Op_LParen None 1 Op_RParen None 2 suite None 0 Op_LBrace None 1 Op_Newline None 2 func_items var 0 func_item var 0 Expr_Name var 1 name_type_list x 0 name_type x 0 Expr_Name x 2 Arith_Equal None 3 testlist f 0 test f 0 or_test f 0 and_test f 0 not_test f 0 comparison f 0 range_expr f 0 expr f 0 xor_expr f 0 and_expr f 0 shift_expr f 0 arith_expr f 0 term f 0 factor f 0 power f 0 atom f 0 Expr_Name f 1 trailer None 0 Op_LParen None 1 arglist x 0 argument x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 2 Op_RParen None 1 semi_newline None 0 Op_Newline None 2 func_item set 0 Expr_Name set 1 place_list x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 trailer None 0 Op_LBracket None 1 subscriptlist 1 0 subscript 1 0 expr 1 0 xor_expr 1 0 and_expr 1 0 shift_expr 1 0 arith_expr 1 0 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 2 Op_RBracket None 2 Arith_Equal None 3 testlist 2 0 test 2 0 or_test 2 0 and_test 2 0 not_test 2 0 comparison 2 0 range_expr 2 0 expr 2 0 xor_expr 2 0 and_expr 2 0 shift_expr 2 0 arith_expr 2 0 term 2 0 factor 2 0 power 2 0 atom 2 0 Expr_DecInt 2 3 semi_newline None 0 Op_Newline None 4 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 5 semi_newline None 0 Op_Newline None 6 func_item f 0 testlist f 0 test f 0 or_test f 0 and_test f 0 not_test f 0 comparison f 0 range_expr f 0 expr f 0 xor_expr f 0 and_expr f 0 shift_expr f 0 arith_expr f 0 term f 0 factor f 0 power f 0 atom f 0 Expr_Name f 1 trailer None 0 Op_LParen None 1 arglist x 0 argument x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 2 Op_RParen None 7 semi_newline None 0 Op_Newline None 8 func_item 1 0 testlist 1 0 test 1 0 or_test 1 0 and_test 1 0 not_test 1 0 comparison 1 0 range_expr 1 0 expr 1 0 xor_expr 1 0 and_expr 1 0 shift_expr 1 0 arith_expr 1 0 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 1 Arith_Plus None 2 term 2 0 factor 2 0 power 2 0 atom 2 0 Expr_DecInt 2 9 semi_newline None 0 Op_Newline None 10 func_item obj 0 testlist obj 0 test obj 0 or_test obj 0 and_test obj 0 not_test obj 0 comparison obj 0 range_expr obj 0 expr obj 0 xor_expr obj 0 and_expr obj 0 shift_expr obj 0 arith_expr obj 0 term obj 0 factor obj 0 power obj 0 atom obj 0 Expr_Name obj 1 trailer . 0 Expr_Dot . 1 Expr_Name method 2 trailer None 0 Op_LParen None 1 Op_RParen None 11 semi_newline None 0 Op_Semi None 12 func_item obj 0 testlist obj 0 test obj 0 or_test obj 0 and_test obj 0 not_test obj 0 comparison obj 0 range_expr obj 0 expr obj 0 xor_expr obj 0 and_expr obj 0 shift_expr obj 0 arith_expr obj 0 term obj 0 factor obj 0 power obj 0 atom obj 0 Expr_Name obj 1 trailer . 0 Expr_Dot . 1 Expr_Name method2 2 trailer None 0 Op_LParen None 1 Op_RParen None 13 semi_newline None 0 Op_Newline None 14 func_item 3 0 testlist 3 0 test 3 0 or_test 3 0 and_test 3 0 not_test 3 0 comparison 3 0 range_expr 3 0 expr 3 0 xor_expr 3 0 and_expr 3 0 shift_expr 3 0 arith_expr 3 0 term 3 0 factor 3 0 power 3 0 atom 3 0 Expr_DecInt 3 1 Arith_Comma None 2 test 4 0 or_test 4 0 and_test 4 0 not_test 4 0 comparison 4 0 range_expr 4 0 expr 4 0 xor_expr 4 0 and_expr 4 0 shift_expr 4 0 arith_expr 4 0 term 4 0 factor 4 0 power 4 0 atom 4 0 Expr_DecInt 4 15 semi_newline None 0 Op_Newline None 16 func_item None 0 testlist None 0 test None 0 or_test None 0 and_test None 0 not_test None 0 comparison None 0 range_expr None 0 expr None 0 xor_expr None 0 and_expr None 0 shift_expr None 0 arith_expr None 0 term None 0 factor None 0 power None 0 atom None 0 Op_LParen None 1 testlist_comp 5 0 test 5 0 or_test 5 0 and_test 5 0 not_test 5 0 comparison 5 0 range_expr 5 0 expr 5 0 xor_expr 5 0 and_expr 5 0 shift_expr 5 0 arith_expr 5 0 term 5 0 factor 5 0 power 5 0 atom 5 0 Expr_DecInt 5 1 Arith_Comma None 2 test 6 0 or_test 6 0 and_test 6 0 not_test 6 0 comparison 6 0 range_expr 6 0 expr 6 0 xor_expr 6 0 and_expr 6 0 shift_expr 6 0 arith_expr 6 0 term 6 0 factor 6 0 power 6 0 atom 6 0 Expr_DecInt 6 2 Op_RParen None 17 semi_newline None 0 Op_Newline None 18 func_item x 0 testlist x 0 test x 0 or_test x 0 and_test x 0 not_test x 0 comparison x 0 range_expr x 0 expr x 0 xor_expr x 0 and_expr x 0 shift_expr x 0 arith_expr x 0 term x 0 factor x 0 power x 0 atom x 0 Expr_Name x 1 Arith_Equal None 2 testlist 1 0 test 1 0 or_test 1 0 and_test 1 0 not_test 1 0 comparison 1 0 range_expr 1 0 expr 1 0 xor_expr 1 0 and_expr 1 0 shift_expr 1 0 arith_expr 1 0 term 1 0 factor 1 0 power 1 0 atom 1 0 Expr_DecInt 1 19 semi_newline None 0 Op_Newline None 3 Op_RBrace None 11 semi_newline None 0 Op_Newline None 6 Op_RBrace None 2 end_outer None 0 Op_Newline None 5 module_item class 0 Expr_Name class 1 tea_class OneVar 0 Expr_Name OneVar 1 Op_LBrace None 2 class_items var 0 class_item var 0 Expr_Name var 1 name_type_list a 0 name_type a 0 Expr_Name a 3 Op_RBrace None 2 end_outer None 0 Op_Newline None 6 module_item class 0 Expr_Name class 1 tea_class OneLine 0 Expr_Name OneLine 1 Op_LBrace None 2 class_items var 0 class_item var 0 Expr_Name var 1 name_type_list a 0 name_type a 0 Expr_Name a 1 semi_newline None 0 Op_Semi None 2 class_item var 0 Expr_Name var 1 name_type_list b 0 name_type b 0 Expr_Name b 3 Op_RBrace None 2 end_outer None 0 Op_Newline None 7 module_item class 0 Expr_Name class 1 tea_class OneLine2 0 Expr_Name OneLine2 1 Op_LBrace None 2 class_items var 0 class_item var 0 Expr_Name var 1 name_type_list a 0 name_type a 0 Expr_Name a 1 semi_newline None 0 Op_Semi None 2 class_item var 0 Expr_Name var 1 name_type_list b 0 name_type b 0 Expr_Name b 3 semi_newline None 0 Op_Semi None 4 class_item func 0 Expr_Func func 1 Expr_Name f 2 tea_func None 0 Op_LParen None 1 param_group x 0 param x 0 Expr_Name x 2 Op_RParen None 3 suite None 0 Op_LBrace None 1 func_items echo 0 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 1 semi_newline None 0 Op_Semi None 2 func_item echo 0 testlist echo 0 test echo 0 or_test echo 0 and_test echo 0 not_test echo 0 comparison echo 0 range_expr echo 0 expr echo 0 xor_expr echo 0 and_expr echo 0 shift_expr echo 0 arith_expr echo 0 term echo 0 factor echo 0 power echo 0 atom echo 0 Expr_Name echo 2 Op_RBrace None 3 Op_RBrace None 2 end_outer None 0 Op_Newline None 8 Eof_Real (command.CommandList children: [ (command.Class name: items:[]) (command.Class name: items:[]) (command.Class name: items:[]) (command.Class name: items:[]) (command.Class name: items:[]) (command.Class name: items:[]) (command.Class name: items:[]) ] ) OK test-parse-all-tea *** Running test-usage (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {(SQ )}] redirects: [] do_fork: T ) terminator: ) (command.Data name: params: [ (Param blame_tok: name: x type: (TypeExpr tok: name:Int) ) (Param blame_tok: name: y type: (TypeExpr tok: name:Int) ) ] ) ] ) 0 tea_module - 0 module_item data 0 Expr_Name data 1 tea_data Point 0 Expr_Name Point 1 Op_LParen None 2 data_params x 0 param x 0 Expr_Name x 1 type_expr Int 0 Expr_Name Int 1 Arith_Comma None 2 param y 0 Expr_Name y 1 type_expr Int 0 Expr_Name Int 3 Op_RParen None 2 end_outer 0 Eof_Real 1 Eof_Real 0 tea_module - 0 module_item data 0 Expr_Name data 1 tea_data Point 0 Expr_Name Point 1 Op_LParen None 2 data_params x 0 param x 0 Expr_Name x 1 type_expr Int 0 Expr_Name Int 1 Arith_Comma None 2 param y 0 Expr_Name y 1 type_expr Int 0 Expr_Name Int 3 Op_RParen None 2 end_outer None 0 Op_Newline None 1 Eof_Real OK test-usage tea/run.sh: 2 tests passed.