(define-grammar c-grammar c-grammar-symbol (fact-assignment-expr program translation-unit external-declaration function-definition declaration declaration-meat untyped-declaration declaration-list declaration-specifiers storage-class-specifier type-specifier actual-type-specifier type-adjective type-qualifier struct-or-union-specifier struct-or-union struct-declaration-list init-declarator-list init-declarator struct-declaration specifier-qualifier-list struct-declarator-list struct-declarator enum-specifier enumerator-list enumerator declarator direct-declarator function-declarator direct-function-declarator pointer type-qualifier-list parameter-list parameter-type-list parameter-declaration identifier-list initializer initializer-list type-name abstract-declarator direct-abstract-declarator statement labeled-statement expression-statement compound-statement statement-list selection-statement iteration-statement jump-statement compound-statement-or-error expression assignment-expression opt-expression assignment-operator conditional-expression constant-expression logical-or-expression logical-and-expression inclusive-or-expression exclusive-or-expression and-expression equality-expression relational-expression shift-expression additive-expression multiplicative-expression cast-expression unary-expression unary-operator postfix-expression primary-expression argument-expression-list constant) (t-character-constant t-literal-string t-auto t-break t-case t-char t-const t-continue t-default t-do t-double t-else t-enum t-extern t-float t-for t-goto t-if t-int t-long t-register t-return t-short t-signed t-sizeof t-static t-struct t-switch t-typedef t-union t-unsigned t-void t-volatile t-while t-openpar t-closedpar t-openbracket t-closedbracket t-comma t-ellipsis t-assign t-assign-mult t-assign-div t-assign-mod t-assign-plus t-assign-minus t-assign-shift-left t-assign-shift-right t-assign-bit-and t-assign-bit-xor t-assign-bit-or t-increment t-decrement t-plus t-minus t-div t-asterisk t-mod t-bit-xor t-bit-or t-bit-and t-bit-not t-bit-shift-right t-bit-shift-left t-question-mark t-colon t-bool-and t-bool-or t-bool-not t-equals t-not-equals t-less t-greater t-less-equal t-greater-equal t-semicolon t-openbrace t-closedbrace t-pointer-struct-access t-point t-identifier t-typename t-integral-constant t-floating-constant) program (((program translation-unit) (program-1 $1)) ((translation-unit external-declaration) (translation-unit-1 $1)) ((translation-unit translation-unit external-declaration) (translation-unit-2 $1 $2)) ((external-declaration function-definition) (external-declaration-1 $1)) ((external-declaration declaration) (external-declaration-2 $1)) ((external-declaration untyped-declaration) (external-declaration-3 $1)) ((function-definition function-declarator compound-statement-or-error) (function-definition-1 $1 $2)) ((function-definition function-declarator declaration-list compound-statement-or-error) (function-definition-2 $1 $2 $3)) ((function-definition declaration-specifiers function-declarator compound-statement-or-error) (function-definition-3 $1 $2 $3)) ((function-definition declaration-specifiers function-declarator declaration-list compound-statement-or-error) (function-definition-4 $1 $2 $3 $4)) ((declaration declaration-meat t-semicolon) (declaration-1 $1 $2)) ((declaration-meat $error) (declaration-meat-1 $1)) ((declaration-meat declaration-specifiers) (declaration-meat-2 $1)) ((declaration-meat declaration-specifiers init-declarator-list) (declaration-meat-3 $1 $2)) ((untyped-declaration init-declarator-list t-semicolon) (untyped-declaration-1 $1 $2)) ((declaration-list declaration) (declaration-list-1 $1)) ((declaration-list declaration-list declaration) (declaration-list-2 $1 $2)) ((declaration-specifiers storage-class-specifier) (declaration-specifiers-1 $1)) ((declaration-specifiers storage-class-specifier declaration-specifiers) (declaration-specifiers-2 $1 $2)) ((declaration-specifiers type-specifier) (declaration-specifiers-3 $1)) ((declaration-specifiers type-specifier declaration-specifiers) (declaration-specifiers-4 $1 $2)) ((declaration-specifiers type-qualifier) (declaration-specifiers-5 $1)) ((declaration-specifiers type-qualifier declaration-specifiers) (declaration-specifiers-6 $1 $2)) ((storage-class-specifier t-typedef) (storage-class-specifier-1 $1)) ((storage-class-specifier t-extern) (storage-class-specifier-2 $1)) ((storage-class-specifier t-static) (storage-class-specifier-3 $1)) ((storage-class-specifier t-auto) (storage-class-specifier-4 $1)) ((storage-class-specifier t-register) (storage-class-specifier-5 $1)) ((type-specifier actual-type-specifier) (type-specifier-1 $1)) ((type-specifier type-adjective) (type-specifier-2 $1)) ((actual-type-specifier t-void) (actual-type-specifier-1 $1)) ((actual-type-specifier t-char) (actual-type-specifier-2 $1)) ((actual-type-specifier t-int) (actual-type-specifier-3 $1)) ((actual-type-specifier t-float) (actual-type-specifier-4 $1)) ((actual-type-specifier t-double) (actual-type-specifier-5 $1)) ((actual-type-specifier struct-or-union-specifier) (actual-type-specifier-6 $1)) ((actual-type-specifier enum-specifier) (actual-type-specifier-7 $1)) ((actual-type-specifier t-typename) (actual-type-specifier-8 $1)) ((type-adjective t-short) (type-adjective-1 $1)) ((type-adjective t-long) (type-adjective-2 $1)) ((type-adjective t-signed) (type-adjective-3 $1)) ((type-adjective t-unsigned) (type-adjective-4 $1)) ((type-qualifier t-const) (type-qualifier-1 $1)) ((type-qualifier t-volatile) (type-qualifier-2 $1)) ((struct-or-union-specifier struct-or-union t-openbrace struct-declaration-list t-closedbrace) (struct-or-union-specifier-1 $1 $2 $3 $4)) ((struct-or-union-specifier struct-or-union t-identifier t-openbrace struct-declaration-list t-closedbrace) (struct-or-union-specifier-2 $1 $2 $3 $4 $5)) ((struct-or-union-specifier struct-or-union t-identifier) (struct-or-union-specifier-3 $1 $2)) ((struct-or-union t-struct) (struct-or-union-1 $1)) ((struct-or-union t-union) (struct-or-union-2 $1)) ((struct-declaration-list struct-declaration) (struct-declaration-list-1 $1)) ((struct-declaration-list struct-declaration-list struct-declaration) (struct-declaration-list-2 $1 $2)) ((init-declarator-list init-declarator) (init-declarator-list-1 $1)) ((init-declarator-list init-declarator-list t-comma init-declarator) (init-declarator-list-2 $1 $2 $3)) ((init-declarator declarator) (init-declarator-1 $1)) ((init-declarator declarator t-assign initializer) (init-declarator-2 $1 $2 $3)) ((struct-declaration specifier-qualifier-list struct-declarator-list t-semicolon) (struct-declaration-1 $1 $2 $3)) ((specifier-qualifier-list type-specifier) (specifier-qualifier-list-1 $1)) ((specifier-qualifier-list type-specifier specifier-qualifier-list) (specifier-qualifier-list-2 $1 $2)) ((specifier-qualifier-list type-qualifier) (specifier-qualifier-list-3 $1)) ((specifier-qualifier-list type-qualifier specifier-qualifier-list) (specifier-qualifier-list-4 $1 $2)) ((struct-declarator-list struct-declarator) (struct-declarator-list-1 $1)) ((struct-declarator-list struct-declarator-list t-comma struct-declarator) (struct-declarator-list-2 $1 $2 $3)) ((struct-declarator declarator) (struct-declarator-1 $1)) ((struct-declarator t-colon constant-expression) (struct-declarator-2 $1 $2)) ((struct-declarator declarator t-colon constant-expression) (struct-declarator-3 $1 $2 $3)) ((enum-specifier t-enum t-openbrace enumerator-list t-closedbrace) (enum-specifier-1 $1 $2 $3 $4)) ((enum-specifier t-enum t-identifier t-openbrace enumerator-list t-closedbrace) (enum-specifier-2 $1 $2 $3 $4 $5)) ((enum-specifier t-enum t-identifier) (enum-specifier-3 $1 $2)) ((enumerator-list enumerator) (enumerator-list-1 $1)) ((enumerator-list enumerator-list t-comma enumerator) (enumerator-list-2 $1 $2 $3)) ((enumerator $error) (enumerator-1 $1)) ((enumerator t-identifier) (enumerator-2 $1)) ((enumerator t-identifier t-assign constant-expression) (enumerator-3 $1 $2 $3)) ((declarator direct-declarator) (declarator-1 $1)) ((declarator pointer direct-declarator) (declarator-2 $1 $2)) ((direct-declarator t-identifier) (direct-declarator-1 $1)) ((direct-declarator t-openpar declarator t-closedpar) (direct-declarator-2 $1 $2 $3)) ((direct-declarator direct-declarator t-openbracket t-closedbracket) (direct-declarator-3 $1 $2 $3)) ((direct-declarator direct-declarator t-openbracket constant-expression t-closedbracket) (direct-declarator-4 $1 $2 $3 $4)) ((direct-declarator direct-declarator t-openpar parameter-type-list t-closedpar) (direct-declarator-5 $1 $2 $3 $4)) ((direct-declarator direct-declarator t-openpar t-closedpar) (direct-declarator-6 $1 $2 $3)) ((direct-declarator direct-declarator t-openpar $error t-closedpar) (direct-declarator-7 $1 $2 $3 $4)) ((direct-declarator direct-declarator t-openpar identifier-list t-closedpar) (direct-declarator-8 $1 $2 $3 $4)) ((function-declarator direct-function-declarator) (function-declarator-1 $1)) ((function-declarator pointer direct-function-declarator) (function-declarator-2 $1 $2)) ((direct-function-declarator direct-declarator t-openpar $error t-closedpar) (direct-function-declarator-1 $1 $2 $3 $4)) ((direct-function-declarator direct-declarator t-openpar parameter-type-list t-closedpar) (direct-function-declarator-2 $1 $2 $3 $4)) ((direct-function-declarator direct-declarator t-openpar t-closedpar) (direct-function-declarator-3 $1 $2 $3)) ((direct-function-declarator direct-declarator t-openpar identifier-list t-closedpar) (direct-function-declarator-4 $1 $2 $3 $4)) ((pointer t-asterisk) (pointer-1 $1)) ((pointer t-asterisk type-qualifier-list) (pointer-2 $1 $2)) ((pointer t-asterisk pointer) (pointer-3 $1 $2)) ((pointer t-asterisk type-qualifier-list pointer) (pointer-4 $1 $2 $3)) ((type-qualifier-list type-qualifier) (type-qualifier-list-1 $1)) ((type-qualifier-list type-qualifier-list type-qualifier) (type-qualifier-list-2 $1 $2)) ((parameter-type-list parameter-list) (parameter-type-list-1 $1)) ((parameter-type-list parameter-list t-comma t-ellipsis) (parameter-type-list-2 $1 $2 $3)) ((parameter-list parameter-declaration) (parameter-list-1 $1)) ((parameter-list parameter-list t-comma parameter-declaration) (parameter-list-2 $1 $2 $3)) ((parameter-declaration declaration-specifiers declarator) (parameter-declaration-1 $1 $2)) ((parameter-declaration declaration-specifiers) (parameter-declaration-2 $1)) ((parameter-declaration declaration-specifiers abstract-declarator) (parameter-declaration-3 $1 $2)) ((identifier-list t-identifier) (identifier-list-1 $1)) ((identifier-list identifier-list t-comma t-identifier) (identifier-list-2 $1 $2 $3)) ((initializer $error) (initializer-1 $1)) ((initializer assignment-expression) (initializer-2 $1)) ((initializer t-openbrace initializer-list t-closedbrace) (initializer-3 $1 $2 $3)) ((initializer t-openbrace initializer-list t-comma t-closedbrace) (initializer-4 $1 $2 $3 $4)) ((initializer-list initializer) (initializer-list-1 $1)) ((initializer-list initializer-list t-comma initializer) (initializer-list-2 $1 $2 $3)) ((type-name specifier-qualifier-list) (type-name-1 $1)) ((type-name specifier-qualifier-list abstract-declarator) (type-name-2 $1 $2)) ((abstract-declarator pointer) (abstract-declarator-1 $1)) ((abstract-declarator direct-abstract-declarator) (abstract-declarator-2 $1)) ((abstract-declarator pointer direct-abstract-declarator) (abstract-declarator-3 $1 $2)) ((direct-abstract-declarator t-openpar abstract-declarator t-closedpar) (direct-abstract-declarator-1 $1 $2 $3)) ((direct-abstract-declarator t-openbracket t-closedbracket) (direct-abstract-declarator-2 $1 $2)) ((direct-abstract-declarator t-openbracket constant-expression t-closedbracket) (direct-abstract-declarator-3 $1 $2 $3)) ((direct-abstract-declarator direct-abstract-declarator t-openbracket t-closedbracket) (direct-abstract-declarator-4 $1 $2 $3)) ((direct-abstract-declarator direct-abstract-declarator t-openbracket constant-expression t-closedbracket) (direct-abstract-declarator-5 $1 $2 $3 $4)) ((direct-abstract-declarator t-openpar t-closedpar) (direct-abstract-declarator-6 $1 $2)) ((direct-abstract-declarator t-openpar parameter-type-list t-closedpar) (direct-abstract-declarator-7 $1 $2 $3)) ((direct-abstract-declarator direct-abstract-declarator t-openpar t-closedpar) (direct-abstract-declarator-8 $1 $2 $3)) ((direct-abstract-declarator direct-abstract-declarator t-openpar parameter-type-list t-closedpar) (direct-abstract-declarator-9 $1 $2 $3 $4)) ((statement labeled-statement) (statement-1 $1)) ((statement compound-statement) (statement-2 $1)) ((statement expression-statement) (statement-3 $1)) ((statement selection-statement) (statement-4 $1)) ((statement iteration-statement) (statement-5 $1)) ((statement jump-statement) (statement-6 $1)) ((labeled-statement t-identifier t-colon statement) (labeled-statement-1 $1 $2 $3)) ((labeled-statement t-case constant-expression t-colon statement) (labeled-statement-2 $1 $2 $3 $4)) ((labeled-statement t-default t-colon statement) (labeled-statement-3 $1 $2 $3)) ((expression-statement opt-expression t-semicolon) (expression-statement-1 $1 $2)) ((compound-statement-or-error compound-statement) (compound-statement-or-error-1 $1)) ((compound-statement-or-error $error compound-statement) (compound-statement-or-error-2 $1 $2)) ((compound-statement t-openbrace t-closedbrace) (compound-statement-1 $1 $2)) ((compound-statement t-openbrace statement-list t-closedbrace) (compound-statement-2 $1 $2 $3)) ((compound-statement t-openbrace declaration-list t-closedbrace) (compound-statement-3 $1 $2 $3)) ((compound-statement t-openbrace declaration-list statement-list t-closedbrace) (compound-statement-4 $1 $2 $3 $4)) ((statement-list statement) (statement-list-1 $1)) ((statement-list statement-list statement) (statement-list-2 $1 $2)) ((selection-statement t-if t-openpar expression t-closedpar statement) (selection-statement-1 $1 $2 $3 $4 $5)) ((selection-statement t-if t-openpar expression t-closedpar statement t-else statement) (selection-statement-2 $1 $2 $3 $4 $5 $6 $7)) ((selection-statement t-switch t-openpar expression t-closedpar statement) (selection-statement-3 $1 $2 $3 $4 $5)) ((iteration-statement t-while t-openpar expression t-closedpar statement) (iteration-statement-1 $1 $2 $3 $4 $5)) ((iteration-statement t-do statement t-while t-openpar expression t-closedpar t-semicolon) (iteration-statement-2 $1 $2 $3 $4 $5 $6 $7)) ((iteration-statement t-for t-openpar opt-expression t-semicolon opt-expression t-semicolon opt-expression t-closedpar statement) (iteration-statement-3 $1 $2 $3 $4 $5 $6 $7 $8 $9)) ((jump-statement t-goto t-identifier t-semicolon) (jump-statement-1 $1 $2 $3)) ((jump-statement t-continue t-semicolon) (jump-statement-2 $1 $2)) ((jump-statement t-break t-semicolon) (jump-statement-3 $1 $2)) ((jump-statement t-return opt-expression t-semicolon) (jump-statement-4 $1 $2 $3)) ((opt-expression expression) (opt-expression-1 $1)) ((opt-expression) (opt-expression-2)) ((expression assignment-expression) (expression-1 $1)) ((expression expression t-comma assignment-expression) (expression-2 $1 $2 $3)) ((assignment-expression conditional-expression fact-assignment-expr) (assignment-expression-1 $1 $2)) ((fact-assignment-expr assignment-operator assignment-expression) (fact-assignment-expr-1 $1 $2)) ((fact-assignment-expr) (fact-assignment-expr-2)) ((assignment-operator t-assign) (assignment-operator-1 $1)) ((assignment-operator t-assign-mult) (assignment-operator-2 $1)) ((assignment-operator t-assign-div) (assignment-operator-3 $1)) ((assignment-operator t-assign-mod) (assignment-operator-4 $1)) ((assignment-operator t-assign-plus) (assignment-operator-5 $1)) ((assignment-operator t-assign-minus) (assignment-operator-6 $1)) ((assignment-operator t-assign-shift-left) (assignment-operator-7 $1)) ((assignment-operator t-assign-shift-right) (assignment-operator-8 $1)) ((assignment-operator t-assign-bit-and) (assignment-operator-9 $1)) ((assignment-operator t-assign-bit-xor) (assignment-operator-10 $1)) ((assignment-operator t-assign-bit-or) (assignment-operator-11 $1)) ((conditional-expression logical-or-expression) (conditional-expression-1 $1)) ((conditional-expression logical-or-expression t-question-mark expression t-colon conditional-expression) (conditional-expression-2 $1 $2 $3 $4 $5)) ((constant-expression conditional-expression) (constant-expression-1 $1)) ((logical-or-expression logical-and-expression) (logical-or-expression-1 $1)) ((logical-or-expression logical-or-expression t-bool-or logical-and-expression) (logical-or-expression-2 $1 $2 $3)) ((logical-and-expression inclusive-or-expression) (logical-and-expression-1 $1)) ((logical-and-expression logical-and-expression t-bool-and inclusive-or-expression) (logical-and-expression-2 $1 $2 $3)) ((inclusive-or-expression exclusive-or-expression) (inclusive-or-expression-1 $1)) ((inclusive-or-expression inclusive-or-expression t-bit-or exclusive-or-expression) (inclusive-or-expression-2 $1 $2 $3)) ((exclusive-or-expression and-expression) (exclusive-or-expression-1 $1)) ((exclusive-or-expression exclusive-or-expression t-bit-xor and-expression) (exclusive-or-expression-2 $1 $2 $3)) ((and-expression equality-expression) (and-expression-1 $1)) ((and-expression and-expression t-bit-and equality-expression) (and-expression-2 $1 $2 $3)) ((equality-expression relational-expression) (equality-expression-1 $1)) ((equality-expression equality-expression t-equals relational-expression) (equality-expression-2 $1 $2 $3)) ((equality-expression equality-expression t-not-equals relational-expression) (equality-expression-3 $1 $2 $3)) ((relational-expression shift-expression) (relational-expression-1 $1)) ((relational-expression relational-expression t-less shift-expression) (relational-expression-2 $1 $2 $3)) ((relational-expression relational-expression t-greater shift-expression) (relational-expression-3 $1 $2 $3)) ((relational-expression relational-expression t-less-equal shift-expression) (relational-expression-4 $1 $2 $3)) ((relational-expression relational-expression t-greater-equal shift-expression) (relational-expression-5 $1 $2 $3)) ((shift-expression additive-expression) (shift-expression-1 $1)) ((shift-expression shift-expression t-bit-shift-left additive-expression) (shift-expression-2 $1 $2 $3)) ((shift-expression shift-expression t-bit-shift-right additive-expression) (shift-expression-3 $1 $2 $3)) ((additive-expression multiplicative-expression) (additive-expression-1 $1)) ((additive-expression additive-expression t-plus multiplicative-expression) (additive-expression-2 $1 $2 $3)) ((additive-expression additive-expression t-minus multiplicative-expression) (additive-expression-3 $1 $2 $3)) ((multiplicative-expression cast-expression) (multiplicative-expression-1 $1)) ((multiplicative-expression multiplicative-expression t-asterisk cast-expression) (multiplicative-expression-2 $1 $2 $3)) ((multiplicative-expression multiplicative-expression t-div cast-expression) (multiplicative-expression-3 $1 $2 $3)) ((multiplicative-expression multiplicative-expression t-mod cast-expression) (multiplicative-expression-4 $1 $2 $3)) ((cast-expression unary-expression) (cast-expression-1 $1)) ((cast-expression t-openpar type-name t-closedpar cast-expression) (cast-expression-2 $1 $2 $3 $4)) ((unary-expression postfix-expression) (unary-expression-1 $1)) ((unary-expression t-increment unary-expression) (unary-expression-2 $1 $2)) ((unary-expression t-decrement unary-expression) (unary-expression-3 $1 $2)) ((unary-expression unary-operator cast-expression) (unary-expression-4 $1 $2)) ((unary-expression t-sizeof unary-expression) (unary-expression-5 $1 $2)) ((unary-expression t-sizeof t-openpar type-name t-closedpar) (unary-expression-6 $1 $2 $3 $4)) ((unary-operator t-bit-and) (unary-operator-1 $1)) ((unary-operator t-asterisk) (unary-operator-2 $1)) ((unary-operator t-plus) (unary-operator-3 $1)) ((unary-operator t-minus) (unary-operator-4 $1)) ((unary-operator t-bit-not) (unary-operator-5 $1)) ((unary-operator t-bool-not) (unary-operator-6 $1)) ((postfix-expression primary-expression) (postfix-expression-1 $1)) ((postfix-expression postfix-expression t-openbracket expression t-closedbracket) (postfix-expression-2 $1 $2 $3 $4)) ((postfix-expression postfix-expression t-openpar t-closedpar) (postfix-expression-3 $1 $2 $3)) ((postfix-expression postfix-expression t-openpar argument-expression-list t-closedpar) (postfix-expression-4 $1 $2 $3 $4)) ((postfix-expression postfix-expression t-point t-identifier) (postfix-expression-5 $1 $2 $3)) ((postfix-expression postfix-expression t-pointer-struct-access t-identifier) (postfix-expression-6 $1 $2 $3)) ((postfix-expression postfix-expression t-increment) (postfix-expression-7 $1 $2)) ((postfix-expression postfix-expression t-decrement) (postfix-expression-8 $1 $2)) ((primary-expression t-identifier) (primary-expression-1 $1)) ((primary-expression constant) (primary-expression-2 $1)) ((primary-expression t-literal-string) (primary-expression-3 $1)) ((primary-expression t-openpar expression t-closedpar) (primary-expression-4 $1 $2 $3)) ((primary-expression t-openpar $error t-closedpar) (primary-expression-5 $1 $2 $3)) ((argument-expression-list assignment-expression) (argument-expression-list-1 $1)) ((argument-expression-list argument-expression-list t-comma assignment-expression) (argument-expression-list-2 $1 $2 $3)) ((constant t-integral-constant) (constant-1 $1)) ((constant t-character-constant) (constant-2 $1)) ((constant t-floating-constant) (constant-3 $1))) #f)