(command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Name PARSER_SH> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(true)}) ) } {(Lit_Other ']')} ) (command.ControlFlow token:<ControlFlow_Return return>) ] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_SH) op:Equal rhs:{(true)})] ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/common.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.linkedlist.sh) } ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_DEBUG) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_PARSED) op:Equal)] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_PARSED_COUNT) op:Equal)] ) (command.FuncDef name: 'parser::parse' body: (command.BraceGroup children: [ (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (substring) } {(DQ (${ VSub_At '@'))} ) ] ) ) (command.FuncDef name: 'parser::parse::multiExpression' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:originalOffset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: {($ VSub_DollarName '$originalOffset')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} { (DQ ('Trying to parse multiExpr from:\n') (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(DQ ($ VSub_DollarName '$text'))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (${ VSub_Name text))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append) } {(DQ ($ VSub_DollarName '$items'))} {(${ VSub_Name PARSER_PARSED)} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name items))} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike offset>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) (command.WhileUntil keyword: <KW_While while> cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(DQ ($ VSub_DollarName '$text'))} {(${ VSub_Name offset)} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name items))} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike offset>) right: (arith_expr.ArithVarRef token: <Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.Sentence child: (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) terminator: <Op_Semi ';'> ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (${ VSub_Name text))} {(${ VSub_Name offset)} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name items))} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike offset>) right: (arith_expr.ArithVarRef token: <Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append) } {(DQ ($ VSub_DollarName '$items'))} {(DQ (${ VSub_Name PARSER_PARSED))} ) (command.Sentence child: (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) terminator: <Op_Semi ';'> ) ] ) ) (C {(stderr)} {(DQ ('Should never get here'))}) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'parser::parse::substring' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (atom) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (sexp) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'parser::parse::atom' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (real) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (integer) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (identifier) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (string) } {(DQ (${ VSub_Name text))} {(DQ (${ VSub_Name offset))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'parser::parse::real' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} { (DQ ('Trying to parse real from:\n') (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_INTEGER_REGEX) op: Equal rhs: {(SQ <'\\(-\\?[1-9][0-9]*\\)'>)} ) ] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_INTEGER_0_REGEX) op: Equal rhs: {(SQ <'\\(0\\)'>)} ) ] ) (command.FuncDef name: 'parser::parse::integer' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:subtext) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} { (DQ ('Trying to parse integer from:\n') (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Sentence child: (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value) op:Equal)] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:value) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(match)} {(DQ (${ VSub_Name subtext))} {($ VSub_DollarName '$PARSER_INTEGER_REGEX')} ) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_QMark '$?')} right: {(0)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Integer)} {(DQ (${ VSub_Name value))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name value> prefix_op: VSub_Pound ) ) } ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(Lit_Digits 0)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ (0))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Integer)} {(DQ (0))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(1)} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_IDENTIFIER_REGEX) op: Equal rhs: {(SQ <'\\([a-zA-Z!?*+<=>_:-][a-zA-Z0-9!?*+<=>_:-]*\\)'>)} ) ] ) (command.FuncDef name: 'parser::parse::identifier' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:subtext) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('Trying to parse identifier from:\n') (${ VSub_Name subtext))} ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Sentence child: (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value) op:Equal)] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:value) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(match)} {(DQ (${ VSub_Name subtext))} {($ VSub_DollarName '$PARSER_IDENTIFIER_REGEX')} ) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_QMark '$?')} right: {(0)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Identifier)} {(DQ (${ VSub_Name value))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name value> prefix_op: VSub_Pound ) ) } ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_STRING_REGEX) op: Equal rhs: {(SQ <'\\([^"]*\\)'>)} ) ] ) (command.FuncDef name: 'parser::parse::string' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:subtext) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('Trying to parse string from:\n') (${ VSub_Name subtext))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(Lit_Digits 0)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))} ) ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] ) ] ) (command.Sentence child: (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value) op:Equal)] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:value) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(match)} { (DQ (word_part.BracedVarSub token: <VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } {($ VSub_DollarName '$PARSER_STRING_REGEX')} ) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_QMark '$?')} right: {(0)} ) ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:endIndex) op:Equal)] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:endIndex) right: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w:{(Lit_Digits 1)}) right: (arith_expr.ArithWord w: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(expr)} {(length)} {(DQ (${ VSub_Name value))})] ) left_token: <Left_DollarParen '$('> ) } ) ) ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name endIndex)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))} ) ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ (${ VSub_Name value))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(expr)} {(length)} {(DQ (${ VSub_Name value))})] ) left_token: <Left_DollarParen '$('> ) } ) right: (arith_expr.ArithWord w:{(Lit_Digits 2)}) ) ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) ) (command.FuncDef name: 'parser::parse::sexp' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:originalOffset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: {($ VSub_DollarName '$originalOffset')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} { (DQ ('Trying to parse sexp from:\n') (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) ) ) ) } ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ ('('))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_PARSED) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(0)} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(DQ ($ VSub_DollarName '$text'))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ (')'))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(${ VSub_Name items)} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike offset>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (${ VSub_Name text))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append) } {(DQ ($ VSub_DollarName '$items'))} {(${ VSub_Name PARSER_PARSED)} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) ] ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(DQ ($ VSub_DollarName '$text'))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(${ VSub_Name PARSER_PARSED_COUNT)}) ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(${ VSub_Name offset)} ) length: (arith_expr.ArithWord w: {(Lit_Digits 1)} ) ) ) ) } right: {(DQ (')'))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(${ VSub_Name items)} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token: <Lit_ArithVarLike offset> ) right: (arith_expr.ArithVarRef token: <Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (${ VSub_Name text))} {(${ VSub_Name offset)} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append) } {(DQ ($ VSub_DollarName '$items'))} {(DQ (${ VSub_Name PARSER_PARSED))} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w: {(${ VSub_Name PARSER_PARSED_COUNT)} ) ) ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ )} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(0)} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) ] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(${ VSub_Name offset)} ) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } right: {(DQ (')'))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(${ VSub_Name items)} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token: <Lit_ArithVarLike offset> ) right: (arith_expr.ArithVarRef token: <Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ )} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(0)} ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) ] ) ] ) ) (C {(stderr)} {(DQ ('Should never get here'))}) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_WHITESPACE_REGEX) op: Equal rhs: {(SQ <'\\([ \t\n'> <'][ \t\n'> <']*\\)'>)} ) ] ) (command.FuncDef name: 'parser::parse::whitespace' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ (${ VSub_Name FUNCNAME) (' ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:text) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:originalOffset) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:{(0)}) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name PARSER_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} { (DQ ('Trying to parse whitespace from:\n') (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name originalOffset)}) ) ) ) } ) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:offset) op: Equal rhs: {(${ VSub_Name originalOffset)} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:char) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:parsed) op:Equal rhs:{(DQ )})] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_DollarName '$char')} right: {(DQ (' '))} ) right: (bool_expr.LogicalOr left: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_DollarName '$char')} right: {(DQ ('\t'))} ) right: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_DollarName '$char')} right: {(DQ ('\n'))} ) ) ) ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_PlusEqual left: (lhs_expr.LhsName name:offset) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:parsed) op: PlusEqual rhs: {(DQ (${ VSub_Name char))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:char) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ VSub_Name offset)}) length: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) } ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_gt left: {($ VSub_DollarName '$offset')} right: {($ VSub_DollarName '$originalOffset')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED) op: Equal rhs: {(DQ (${ VSub_Name parsed))} ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike offset>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:PARSER_PARSED) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PARSER_PARSED_COUNT) op: Equal rhs: {(0)} ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {($ VSub_Number '$0')} {(KW_Bang '!') (Lit_Other '=')} {($ VSub_DollarName '$BASH_SOURCE')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Return return>)] ) ] ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/test.sh) } ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (1))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('parse 1 succeeds'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Integer :: 1'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse 1'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} {(DQ ('parse 1 / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (123456))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('parse 123456 succeeds'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Integer :: 123456'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse 123456'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(6)} {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} {(DQ ('parse 123456 / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (0))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('parse 0 succeeds'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Integer :: 0'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse 0'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} {(DQ ('parse 0 / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (-10))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('parse -10 succeeds'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Integer :: -10'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse -10'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} {(DQ ('parse 1 / count'))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:output) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (-0))})] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('parse -0 should fail'))} ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ (v))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} { (DQ ('parse ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (abc) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' succeeds') ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Identifier :: v'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse v'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('a?'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} { (DQ ('parse ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (abc) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' succeeds') ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Identifier :: a?'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('parse a?'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(SQ <'"abc"'>)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} { (DQ ('parse ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (abc) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' succeeds') ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('String :: abc'))} {(DQ (${ VSub_Name RESULT))} { (DQ ('parse ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (abc) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(5)} {(DQ (${ VSub_Name PARSER_PARSED_COUNT))} { (DQ ('parse ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (abc) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' / count') ) } ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(SQ <' \t '>)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('match whitespace / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('match whitepace / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(SQ <'abc def'>)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('match non-whitespace / code'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(SQ )} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('match empty non-whitespace / code'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (whitespace) } {(SQ <')'>)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('match close paren against whitespace / code'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - single expr'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ (a))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(${ VSub_Name RESULT)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (a))} {(DQ (${ VSub_Name RESULT))} {(DQ (${ VSub_Name TEST) (' / value'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - multiple expressions'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ ('a b'))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(2)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - whitespaces'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ (' b '))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - integer'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ (1))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - sexp'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ ('(a)'))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:TEST) op: Equal rhs: {(DQ ('multiExpression - sexps'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse) (Lit_Other ':') (Lit_Other ':') (multiExpression) } {(DQ ('(a) (b)'))} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ (${ VSub_Name TEST) (' / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(7)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ VSub_Name TEST) (' / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(2)} {(${ VSub_Name RESULT)} {(DQ (${ VSub_Name TEST) (' / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('()'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('match empty sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(2)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('match empty sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('match empty sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {(${ VSub_Name RESULT)} {(DQ ('match empty sexp / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('( )'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('match almost empty sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('match almost empty sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('match almost empty sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {(${ VSub_Name RESULT)} {(DQ ('match almost empty sexp / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('(a)'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('single element sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('single element sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('single element sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ ('single element sexp / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('( a )'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('single element sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(5)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('single element sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('single element sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {(${ VSub_Name RESULT)} {(DQ ('single element sexp / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('(a b)'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('two element sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(5)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('two element sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('two element sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(2)} {(${ VSub_Name RESULT)} {(DQ ('two element sexp / length'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(parser) (Lit_Other ':') (Lit_Other ':') (parse)} {(DQ ('((a) (b) c)'))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('nested element sexp / code'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(11)} {(${ VSub_Name PARSER_PARSED_COUNT)} {(DQ ('nested element sexp / count'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (type)} {(${ VSub_Name PARSER_PARSED)}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ (LinkedList))} {(${ VSub_Name RESULT)} {(DQ ('nested element sexp / type'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(${ VSub_Name PARSER_PARSED)} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(3)} {(${ VSub_Name RESULT)} {(DQ ('nested element sexp / length'))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (report)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(isset)}) ) } {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (debug))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(C {(variable) (Lit_Other ':') (Lit_Other ':') (printMetadata)})] ) ] ) ] )