Skip to content

Instantly share code, notes, and snippets.

@iamahuman
Created May 1, 2017 15:27
Show Gist options
  • Save iamahuman/bdc0a4c30e9195dd851b33b5d341ede9 to your computer and use it in GitHub Desktop.
Save iamahuman/bdc0a4c30e9195dd851b33b5d341ede9 to your computer and use it in GitHub Desktop.
naive C99 parser
function abstract_declarator(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.pointer(t,a))){if(a.pointer<t.length)$1=this.direct_abstract_declarator(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}a=C(r);$0=undefined;if(a.pointer<t.length&&($1=this.direct_abstract_declarator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function additive_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.multiplicative_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.additive_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function additive_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"+"))){if(a.pointer<t.length&&($1=this.multiplicative_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"-"))){if(a.pointer<t.length&&($1=this.multiplicative_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function and_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.equality_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.and_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function and_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"&"))){if(a.pointer<t.length&&($1=this.equality_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function argument_expr_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.assignment_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.argument_expr_list_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function argument_expr_list_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.assignment_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function assignment_expr(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.unary_expr(t,a))){if(a.pointer<t.length&&($1=this.assignment_operator(t,a))){if(a.pointer<t.length&&($2=this.assignment_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.conditional_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function assignment_operator(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"="))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"MUL_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DIV_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"MOD_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"ADD_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SUB_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"LEFT_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"RIGHT_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"AND_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"XOR_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"OR_ASSIGN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function block_item(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.declaration(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function cast_expr(t,r){var w,a,$0,$1,$2,$3;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.type_name(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($3=this.cast_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.unary_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function compound_stmt(t,r){var w,a,d=C(r.typedefs),$0,$1,$2;(a=C(r)).typedefs=d;if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"{"))){for($1=[];a.pointer<t.length&&(w=this.block_item(t,a));$1[$1.length]=w);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"}"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}return null;}function conditional_expr(t,r){var w,a,$0,$1,$2,$3,$4;a=C(r);if(a.pointer<t.length&&($0=this.logical_or_expr(t,a))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"?"))){if(a.pointer<t.length&&($2=this.expr(t,a))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,":"))){if(a.pointer<t.length&&($4=this.conditional_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}}a=C(r);if(a.pointer<t.length&&($0=this.logical_or_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function constant_expr(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.conditional_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function declaration(t,r){var w,a,$0,$1,$2;a=C(r);for($0=[];a.pointer<t.length&&(w=this.declaration_specifier(t,a));$0[$0.length]=w);if($0.length){if(a.pointer<t.length)$1=this.init_declarator_list(t,a);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return P(t,r,{name:N,children:[$0,$1,$2]});}}return null;}function declaration_specifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.storage_class_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.type_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.type_qualifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.function_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function declarator(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length)$0=this.pointer(t,a);if(a.pointer<t.length&&($1=this.direct_declarator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function designation(t,r){var w,a,$0,$1;a=C(r);for($0=[];a.pointer<t.length&&(w=this.designator(t,a));$0[$0.length]=w);if($0.length){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"="))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function designator(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){if(a.pointer<t.length&&($1=this.constant_expr(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"."))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function direct_abstract_declarator(t,r){var w,a,$0,$1,$2,$3;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.abstract_declarator(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){for($3=[];a.pointer<t.length&&(w=this.direct_abstract_declarator_i(t,a));$3[$3.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}a=C(r);for($0=[];a.pointer<t.length&&(w=this.direct_abstract_declarator_i(t,a));$0[$0.length]=w);r.pointer=a.pointer;return{name:N,children:[$0]};}function direct_abstract_declarator_i(t,r){var w,a,$0,$1,$2,$3,$4;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length)$2=this.assignment_expr(t,a);if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"STATIC"))){for($2=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$2[$2.length]=w);if(a.pointer<t.length&&($3=this.assignment_expr(t,a))){if(a.pointer<t.length&&($4=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"STATIC"))){if(a.pointer<t.length)$3=this.assignment_expr(t,a);if(a.pointer<t.length&&($4=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"*"))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length)$1=this.parameter_type_list(t,a);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}return null;}function direct_declarator(t,r){var w,a,$0,$1,$2,$3;a=C(r);$0=undefined;if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){$2=undefined;for($3=[];a.pointer<t.length&&(w=this.direct_declarator_i(t,a));$3[$3.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.declarator(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){for($3=[];a.pointer<t.length&&(w=this.direct_declarator_i(t,a));$3[$3.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}return null;}function direct_declarator_i(t,r){var w,a,$0,$1,$2,$3,$4;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"STATIC"))){for($2=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$2[$2.length]=w);if(a.pointer<t.length&&($3=this.assignment_expr(t,a))){if(a.pointer<t.length&&($4=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"STATIC"))){if(a.pointer<t.length&&($3=this.assignment_expr(t,a))){if(a.pointer<t.length&&($4=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"*"))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length)$2=this.assignment_expr(t,a);if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.parameter_type_list(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length)$1=this.identifier_list(t,a);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}return null;}function enum_specifier(t,r){var w,a,$0,$1,$2,$3,$4,$5;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"ENUM"))){if(a.pointer<t.length)$1=this.TERMINAL(t,a,"IDENTIFIER");if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"{"))){if(a.pointer<t.length&&($3=this.enumerator_list(t,a))){if(a.pointer<t.length)$4=this.TERMINAL(t,a,",");if(a.pointer<t.length&&($5=this.TERMINAL(t,a,"}"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"ENUM"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function enumerator(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IDENTIFIER"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"="))){if(a.pointer<t.length&&($2=this.constant_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function enumerator_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.enumerator(t,a))){for($1=[];a.pointer<t.length&&(w=this.enumerator_list_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function enumerator_list_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.enumerator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function equality_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.relational_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.equality_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function equality_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"EQ_OP"))){if(a.pointer<t.length&&($1=this.relational_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"NE_OP"))){if(a.pointer<t.length&&($1=this.relational_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function exclusive_or_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.and_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.exclusive_or_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function exclusive_or_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"^"))){if(a.pointer<t.length&&($1=this.and_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.assignment_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.assignment_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function expression_stmt(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length)$0=this.expr(t,a);if(a.pointer<t.length&&($1=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function function_definition(t,r){var w,a,$0,$1,$2,$3;a=C(r);for($0=[];a.pointer<t.length&&(w=this.declaration_specifier(t,a));$0[$0.length]=w);if($0.length){if(a.pointer<t.length&&($1=this.declarator(t,a))){for($2=[];a.pointer<t.length&&(w=this.declaration(t,a));$2[$2.length]=w);if(a.pointer<t.length&&($3=this.compound_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}return null;}function function_specifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"INLINE"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function identifier_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IDENTIFIER"))){for($1=[];a.pointer<t.length&&(w=this.identifier_list_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function identifier_list_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function inclusive_or_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.exclusive_or_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.inclusive_or_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function inclusive_or_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"|"))){if(a.pointer<t.length&&($1=this.exclusive_or_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function init_declarator(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.declarator(t,a))){if(a.pointer<t.length)$1=this.init_declarator_o(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function init_declarator_o(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"="))){if(a.pointer<t.length&&($1=this.initializer(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function init_declarator_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.init_declarator(t,a))){for($1=[];a.pointer<t.length&&(w=this.init_declarator_list_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function init_declarator_list_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.init_declarator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function initializer(t,r){var w,a,$0,$1,$2,$3;a=C(r);if(a.pointer<t.length&&($0=this.assignment_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"{"))){if(a.pointer<t.length&&($1=this.initializer_list(t,a))){if(a.pointer<t.length)$2=this.TERMINAL(t,a,",");if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"}"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}return null;}function initializer_list(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length)$0=this.designation(t,a);if(a.pointer<t.length&&($1=this.initializer(t,a))){for($2=[];a.pointer<t.length&&(w=this.initializer_list_i(t,a));$2[$2.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}return null;}function initializer_list_i(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length)$1=this.designation(t,a);if(a.pointer<t.length&&($2=this.initializer(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}return null;}function jump_stmt(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"GOTO"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"CONTINUE"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"BREAK"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"RETURN"))){if(a.pointer<t.length)$1=this.expr(t,a);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}return null;}function logical_and_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.inclusive_or_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.logical_and_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function logical_and_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"AND_OP"))){if(a.pointer<t.length&&($1=this.inclusive_or_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function logical_or_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.logical_and_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.logical_or_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function logical_or_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"OR_OP"))){if(a.pointer<t.length&&($1=this.logical_and_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function multiplicative_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.cast_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.multiplicative_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function multiplicative_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"*"))){if(a.pointer<t.length&&($1=this.cast_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"/"))){if(a.pointer<t.length&&($1=this.cast_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"%"))){if(a.pointer<t.length&&($1=this.cast_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function parameter_declaration(t,r){var w,a,$0,$1;a=C(r);for($0=[];a.pointer<t.length&&(w=this.declaration_specifier(t,a));$0[$0.length]=w);if($0.length){if(a.pointer<t.length)$1=this.parameter_declaration_o(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function parameter_declaration_o(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.declarator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.abstract_declarator(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function parameter_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.parameter_declaration(t,a))){for($1=[];a.pointer<t.length&&(w=this.parameter_list_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function parameter_list_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.parameter_declaration(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function parameter_type_list(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.parameter_list(t,a))){if(a.pointer<t.length)$1=this.parameter_type_list_ellipsis(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function parameter_type_list_ellipsis(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,","))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"ELLIPSIS"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function pointer(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"*"))){for($1=[];a.pointer<t.length&&(w=this.type_qualifier(t,a));$1[$1.length]=w);if(a.pointer<t.length)$2=this.pointer(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}return null;}function postfix_expr(t,r){var w,a,$0,$1,$2,$3,$4,$5,$6,$7;a=C(r);if(a.pointer<t.length&&($0=this.primary_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.postfix_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.type_name(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"{"))){if(a.pointer<t.length&&($4=this.initializer_list(t,a))){if(a.pointer<t.length)$5=this.TERMINAL(t,a,",");if(a.pointer<t.length&&($6=this.TERMINAL(t,a,"}"))){for($7=[];a.pointer<t.length&&(w=this.postfix_expr_i(t,a));$7[$7.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5,$6,$7]};}}}}}}return null;}function postfix_expr_i(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"["))){if(a.pointer<t.length&&($1=this.expr(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"]"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length)$1=this.argument_expr_list(t,a);if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"."))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"PTR_OP"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"INC_OP"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DEC_OP"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function primary_expr(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"CONSTANT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"STRING_LITERAL"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($1=this.expr(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}return null;}function relational_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.shift_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.relational_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function relational_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"<"))){if(a.pointer<t.length&&($1=this.shift_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,">"))){if(a.pointer<t.length&&($1=this.shift_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"LE_OP"))){if(a.pointer<t.length&&($1=this.shift_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"GE_OP"))){if(a.pointer<t.length&&($1=this.shift_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function selection_stmt(t,r){var w,a,$0,$1,$2,$3,$4,$5;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IF"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.expr(t,a))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($4=this.stmt(t,a))){if(a.pointer<t.length)$5=this.selection_stmt_else(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5]};}}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SWITCH"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.expr(t,a))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($4=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}}return null;}function selection_stmt_else(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"ELSE"))){if(a.pointer<t.length&&($1=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function shift_expr(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.additive_expr(t,a))){for($1=[];a.pointer<t.length&&(w=this.shift_expr_i(t,a));$1[$1.length]=w);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function shift_expr_i(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"LEFT_OP"))){if(a.pointer<t.length&&($1=this.additive_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"RIGHT_OP"))){if(a.pointer<t.length&&($1=this.additive_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function specifier_qualifier_list(t,r){var w,a,$0;a=C(r);for($0=[];a.pointer<t.length&&(w=this.specifier_or_qualifier(t,a));$0[$0.length]=w);if($0.length){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function specifier_or_qualifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.type_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.type_qualifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function stmt(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.labeled_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.compound_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.expression_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.selection_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.iteration_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.jump_stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function labeled_stmt(t,r){var w,a,$0,$1,$2,$3;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IDENTIFIER"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,":"))){if(a.pointer<t.length&&($2=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"CASE"))){if(a.pointer<t.length&&($1=this.constant_expr(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,":"))){if(a.pointer<t.length&&($3=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DEFAULT"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,":"))){if(a.pointer<t.length&&($2=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}return null;}function iteration_stmt(t,r){var w,a,$0,$1,$2,$3,$4,$5,$6;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"WHILE"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.expr(t,a))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($4=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DO"))){if(a.pointer<t.length&&($1=this.stmt(t,a))){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"WHILE"))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($4=this.expr(t,a))){if(a.pointer<t.length&&($5=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($6=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5,$6]};}}}}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"FOR"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.expression_stmt(t,a))){if(a.pointer<t.length&&($3=this.expression_stmt(t,a))){if(a.pointer<t.length)$4=this.expr(t,a);if(a.pointer<t.length&&($5=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($6=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5,$6]};}}}}}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"FOR"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.declaration(t,a))){if(a.pointer<t.length&&($3=this.expression_stmt(t,a))){if(a.pointer<t.length)$4=this.expr(t,a);if(a.pointer<t.length&&($5=this.TERMINAL(t,a,")"))){if(a.pointer<t.length&&($6=this.stmt(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4,$5,$6]};}}}}}}return null;}function storage_class_specifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"TYPEDEF"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"EXTERN"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"STATIC"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"AUTO"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"REGISTER"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function struct_declaration(t,r){var w,a,$0,$1,$2;a=C(r);if(a.pointer<t.length&&($0=this.specifier_qualifier_list(t,a))){for($1=[];a.pointer<t.length&&(w=this.struct_declarator(t,a));$1[$1.length]=w);if($1.length){if(a.pointer<t.length&&($2=this.TERMINAL(t,a,";"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2]};}}}return null;}function struct_declarator(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.declarator(t,a))){if(a.pointer<t.length)$1=this.struct_declarator_o(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function struct_declarator_o(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,":"))){if(a.pointer<t.length&&($1=this.constant_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function struct_declarator_list(t,r){var w,a,$0;a=C(r);for($0=[];a.pointer<t.length&&(w=this.struct_declarator(t,a));$0[$0.length]=w);if($0.length){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function struct_or_union(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"STRUCT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"UNION"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function struct_or_union_specifier(t,r){var w,a,d=C(r.typedefs),$0,$1,$2,$3,$4;(a=C(r)).typedefs=d;if(a.pointer<t.length&&($0=this.struct_or_union(t,a))){if(a.pointer<t.length)$1=this.TERMINAL(t,a,"IDENTIFIER");if(a.pointer<t.length&&($2=this.TERMINAL(t,a,"{"))){for($3=[];a.pointer<t.length&&(w=this.struct_declaration(t,a));$3[$3.length]=w);if(a.pointer<t.length&&($4=this.TERMINAL(t,a,"}"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3,$4]};}}}(a=C(r)).typedefs=d;if(a.pointer<t.length&&($0=this.struct_or_union(t,a))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}return null;}function type_name(t,r){var w,a,$0,$1;a=C(r);if(a.pointer<t.length&&($0=this.specifier_qualifier_list(t,a))){if(a.pointer<t.length)$1=this.abstract_declarator(t,a);r.pointer=a.pointer;return{name:N,children:[$0,$1]};}return null;}function type_qualifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"CONST"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"VOLATILE"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"RESTRICT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function type_specifier(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"VOID"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"CHAR"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SHORT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"INT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"LONG"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"FLOAT"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DOUBLE"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SIGNED"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"UNSIGNED"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"BOOL"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"COMPLEX"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"IMAGINARY"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.struct_or_union_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.enum_specifier(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"TYPEDEF_IDENTIFIER"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function unary_expr(t,r){var w,a,$0,$1,$2,$3;a=C(r);if(a.pointer<t.length&&($0=this.postfix_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"INC_OP"))){if(a.pointer<t.length&&($1=this.unary_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"DEC_OP"))){if(a.pointer<t.length&&($1=this.unary_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.unary_operator(t,a))){if(a.pointer<t.length&&($1=this.cast_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SIZEOF"))){if(a.pointer<t.length&&($1=this.unary_expr(t,a))){r.pointer=a.pointer;return{name:N,children:[$0,$1]};}}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"SIZEOF"))){if(a.pointer<t.length&&($1=this.TERMINAL(t,a,"("))){if(a.pointer<t.length&&($2=this.type_name(t,a))){if(a.pointer<t.length&&($3=this.TERMINAL(t,a,")"))){r.pointer=a.pointer;return{name:N,children:[$0,$1,$2,$3]};}}}}return null;}function unary_operator(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"&"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"*"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"+"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"-"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"~"))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.TERMINAL(t,a,"!"))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function external_declaration(t,r){var w,a,$0;a=C(r);if(a.pointer<t.length&&($0=this.function_definition(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}a=C(r);if(a.pointer<t.length&&($0=this.declaration(t,a))){r.pointer=a.pointer;return{name:N,children:[$0]};}return null;}function translation_unit(t,r){var w,a,d=C(r.typedefs),$0;(a=C(r)).typedefs=d;for($0=[];a.pointer<t.length&&(w=this.external_declaration(t,a));$0[$0.length]=w);r.pointer=a.pointer;return{name:N,children:[$0]};}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment