digraph parser {
- expr [label = "expression", fillcolor="#26c326", style=filled];
- assignexpr [label = "assignment-expression", fillcolor="#26c326", style=filled];
- condexpr [label = "conditional-expression", fillcolor="#26c326", style=filled];
- assignop [label = "assignment-operator", fillcolor="#26c326", style=filled];
- unaryexpr [label = "unary-expression", fillcolor="#26c326", style=filled];
-
- pfixexpr [label = "postfix-expression", fillcolor="#26c326", style=filled];
- castexpr [label = "cast-expression", fillcolor="#26c326", style=filled];
- unaryop [label = "unary-operator", fillcolor="#d2d2d2", style=filled];
-
- priexpr [label = "primary-expression", fillcolor="#26c326", style=filled];
- argexprlist [label = "argument-expression-list", fillcolor="#26c326", style=filled];
-
- identifier [label = "identifier", fillcolor="#26c326", style=filled];
- constant [label = "constant", fillcolor="#26c326", style=filled];
- string [label = "string", fillcolor="#26c326", style=filled];
- typename [label = "type-name"];
-
- logorexpr [label = "logical-OR-expression", fillcolor="#26c326", style=filled];
- logandexpr [label = "logical-AND-expression", fillcolor="#26c326", style=filled];
- incorexpr [label = "inclusive-OR-expression", fillcolor="#26c326", style=filled];
- excorexpr [label = "exclusive-OR-expression", fillcolor="#26c326", style=filled];
- andexpr [label = "AND-expression", fillcolor="#26c326", style=filled];
- eqexpr [label = "equality-expression", fillcolor="#26c326", style=filled];
- relexpr [label = "relational-expression", fillcolor="#26c326", style=filled];
- shiftexpr [label = "shift-expression", fillcolor="#26c326", style=filled];
- addexpr [label = "additive-expression", fillcolor="#26c326", style=filled];
- mulexpr [label = "multiplicative-expression", fillcolor="#26c326", style=filled];
-
- expr -> assignexpr;
- assignexpr -> condexpr;
- assignexpr -> unaryexpr;
- assignexpr -> assignexpr;
- assignexpr -> assignop;
-
- unaryexpr -> unaryop;
- unaryexpr -> castexpr;
- unaryexpr -> pfixexpr;
- unaryexpr -> unaryexpr;
- unaryexpr -> typename;
-
- condexpr -> logorexpr;
- condexpr -> expr;
- condexpr -> condexpr;
-
- logorexpr -> logorexpr;
- logorexpr -> logandexpr;
-
- logandexpr -> logandexpr;
- logandexpr -> incorexpr;
-
- incorexpr -> incorexpr;
- incorexpr -> excorexpr;
-
- excorexpr -> excorexpr;
- excorexpr -> andexpr;
-
- andexpr -> andexpr;
- andexpr -> eqexpr;
-
- eqexpr -> relexpr;
- eqexpr -> eqexpr;
-
- relexpr -> shiftexpr;
- relexpr -> relexpr;
-
- shiftexpr -> addexpr;
- shiftexpr -> shiftexpr;
-
- addexpr -> addexpr;
- addexpr -> mulexpr;
-
- mulexpr -> castexpr;
- mulexpr -> mulexpr;
-
- castexpr -> unaryexpr;
- castexpr -> castexpr;
- castexpr -> typename;
-
- pfixexpr -> priexpr;
- pfixexpr -> pfixexpr;
- pfixexpr -> expr;
- pfixexpr -> identifier;
- pfixexpr -> argexprlist;
-
- argexprlist -> argexprlist;
- argexprlist -> assignexpr;
-
- priexpr -> identifier;
- priexpr -> constant;
- priexpr -> string;
- priexpr -> expr;
+
+ abstract_declarator [label = "abstract-declarator"];
+ additive_expression [label = "additive-expression", fillcolor="#26c326", style=filled];
+ and_expression [label = "and-expression", fillcolor="#26c326", style=filled];
+ argument_expression_list [label = "argument-expression-list", fillcolor="#26c326", style=filled];
+ assignment_expression [label = "assignment-expression", fillcolor="#26c326", style=filled];
+ assignment_operator [label = "assignment-operator", fillcolor="#d2d2d2", style=filled];
+
+ cast_expression [label = "cast-expression", fillcolor="#26c326", style=filled];
+ character_constant [label = "character-constant", fillcolor="#26c326", style=filled];
+ compound_statement [label = "compound-statement"];
+ conditional_expression [label = "conditional-expression", fillcolor="#26c326", style=filled];
+ constant [label = "constant", fillcolor="#26c326", style=filled];
+ constant_expression [label = "constant-expression"];
+
+ declaration [label = "declaration"];
+ declaration_list [label = "declaration-list"];
+ declaration_specifiers [label = "declaration-specifiers", fillcolor="#26c326", style=filled];
+ declarator [label = "declarator"];
+ direct_abstract_declarator [label = "direct-abstract-declarator"];
+ direct_declarator [label = "direct-declarator"];
+
+ enum_specifier [label = "enum-specifier"];
+ enumeration_constant [label = "enumeration-constant"];
+ enumerator [label = "enumerator"];
+ enumerator_list [label = "enumerator-list"];
+ equality_expression [label = "equality-expression", fillcolor="#26c326", style=filled];
+ exclusive_or_expression [label = "exclusive-OR-expression", fillcolor="#26c326", style=filled];
+ expression [label = "expression", fillcolor="#26c326", style=filled];
+ expression_statement [label = "expression-statement"];
+ external_declaration [label = "external-declaration", fillcolor="#26c326", style=filled];
+
+ floating_constant [label = "floating-constant", fillcolor="#26c326", style=filled];
+ function_definition [label = "function-definition", fillcolor="#26c326", style=filled];
+
+ identifier [label = "identifier", fillcolor="#26c326", style=filled];
+ identifier_list [label = "identifier-list"];
+ inclusive_or_expression [label = "inclusive-OR-expression", fillcolor="#26c326", style=filled];
+ init_declarator [label = "init-declarator"];
+ init_declarator_list [label = "init-declarator-list"];
+ initializer [label = "initializer"];
+ initializer_list [label = "initializer-list"];
+ integer_constant [label = "integer-constant", fillcolor="#26c326", style=filled];
+ iteration_statement [label = "iteration-statement"];
+
+ jump_statement [label = "jump-statement"];
+
+ labeled_statement [label = "labeled-statement"];
+ logical_and_expression [label = "logical-AND-expression", fillcolor="#26c326", style=filled];
+ logical_or_expression [label = "logical-OR-expression", fillcolor="#26c326", style=filled];
+
+ multiplicative_expression [label = "multiplicative-expression", fillcolor="#26c326", style=filled];
+
+ parameter_declaration [label = "parameter-declaration"];
+ parameter_list [label = "parameter-list"];
+ parameter_type_list [label = "parameter-type-list"];
+ pointer [label = "pointer"];
+ postfix_expression [label = "postfix-expression", fillcolor="#26c326", style=filled];
+ primary_expression [label = "primary-expression", fillcolor="#26c326", style=filled];
+
+ relational_expression [label = "relational-expression", fillcolor="#26c326", style=filled];
+
+ selection_statement [label = "selection-statement"];
+ shift_expression [label = "shift-expression", fillcolor="#26c326", style=filled];
+ specifier_qualifier_list [label = "specifier-qualifier-list", fillcolor="#26c326", style=filled];
+ statement [label = "statement"];
+ statement_list [label = "statement-list"];
+ storage_class_specifier [label = "storage-class-specifier", fillcolor="#26c326", style=filled];
+ string [label = "string", fillcolor="#26c326", style=filled];
+ struct_declaration [label = "struct-declaration"];
+ struct_declaration_list [label = "struct-declaration-list"];
+ struct_declarator [label = "struct-declarator"];
+ struct_declarator_list [label = "struct-declarator-list"];
+ struct_or_union [label = "struct-or-union"];
+ struct_or_union_specifier [label = "struct-or-union-specifier"];
+
+ translation_unit [label = "translation-unit", fillcolor="#26c326", style=filled];
+ type_name [label = "type-name"];
+ type_qualifier [label = "type-qualifier", fillcolor="#26c326", style=filled];
+ type_qualifier_list [label = "type-qualifier-list"];
+ type_specifier [label = "type-specifier", fillcolor="#26c326", style=filled];
+ typedef_name [label = "typedef-name"];
+
+ unary_expression [label = "unary-expression", fillcolor="#26c326", style=filled];
+ unary_operator [label = "unary-operator", fillcolor="#d2d2d2", style=filled];
+
+ translation_unit -> external_declaration;
+ translation_unit -> translation_unit;
+
+ external_declaration -> function_definition;
+ external_declaration -> declaration;
+
+ function_definition -> declaration_specifiers;
+ function_definition -> declarator;
+ function_definition -> declaration_list;
+ function_definition -> compound_statement;
+
+ declaration -> declaration_specifiers;
+ declaration -> init_declarator_list;
+
+ declaration_list -> declaration;
+ declaration_list -> declaration_list;
+
+ declaration_specifiers -> storage_class_specifier;
+ declaration_specifiers -> declaration_specifiers;
+ declaration_specifiers -> type_specifier;
+ declaration_specifiers -> type_qualifier;
+
+ type_specifier -> struct_or_union_specifier;
+ type_specifier -> enum_specifier;
+ type_specifier -> typedef_name;
+
+ struct_or_union_specifier -> struct_or_union;
+ struct_or_union_specifier -> identifier;
+ struct_or_union_specifier -> struct_declaration_list;
+
+ struct_declaration_list -> struct_declaration;
+ struct_declaration_list -> struct_declaration_list;
+
+ init_declarator_list -> init_declarator;
+ init_declarator_list -> init_declarator_list;
+
+ init_declarator -> declarator;
+ init_declarator -> initializer;
+
+ struct_declaration -> specifier_qualifier_list;
+ struct_declaration -> struct_declarator_list;
+
+ specifier_qualifier_list -> type_specifier;
+ specifier_qualifier_list -> type_qualifier;
+ specifier_qualifier_list -> specifier_qualifier_list;
+
+ struct_declarator_list -> struct_declarator;
+ struct_declarator_list -> struct_declarator_list;
+
+ struct_declarator -> declarator;
+ struct_declarator -> constant_expression;
+
+ enum_specifier -> identifer;
+ enum_specifier -> enumerator_list;
+
+ enumerator_list -> enumerator;
+ enumerator_list -> enumerator_list;
+
+ enumerator -> identifier;
+ enumerator -> constant_expression;
+
+ declarator -> pointer;
+ declarator -> direct_declarator;
+
+ direct_declarator -> identifer;
+ direct_declarator -> declarator;
+ direct_declarator -> direct_declarator;
+ direct_declarator -> constant_expression;
+ direct_declarator -> parameter_type_list;
+ direct_declarator -> identifier_list;
+
+ pointer -> type_qualifier_list;
+ pointer -> pointer;
+
+ type_qualifier_list -> type_qualifier;
+ type_qualifier_list -> type_qualifier_list;
+
+ parameter_type_list -> parameter_list;
+
+ parameter_list -> parameter_declaration;
+ parameter_list -> parameter_list;
+
+ parameter_declaration -> declaration_specifiers;
+ parameter_declaration -> declarator;
+ parameter_declaration -> abstract_declarator;
+
+ identifier_list -> identifer;
+ identifier_list -> identifier_list;
+
+ initializer -> assignment_expression;
+ initializer -> initializer_list;
+
+ initializer_list -> initializer;
+ initializer_list -> initializer_list;
+
+ type_name -> specifier_qualifier_list;
+ type_name -> abstract_declarator;
+
+ abstract_declarator -> pointer;
+ abstract_declarator -> direct_abstract_declarator;
+
+ direct_abstract_declarator -> abstract_declarator;
+ direct_abstract_declarator -> direct_abstract_declarator;
+ direct_abstract_declarator -> constant_expression;
+ direct_abstract_declarator -> parameter_type_list;
+
+ typedef_name -> identifier;
+
+ statement -> labeled_statement;
+ statement -> expression_statement;
+ statement -> compound_statement;
+ statement -> selection_statement;
+ statement -> iteration_statement;
+ statement -> jump_statement;
+
+ labeled_statement -> identifier;
+ labeled_statement -> statement;
+ labeled_statement -> constant_expression;
+
+ expression_statement -> expression;
+
+ compound_statement -> declaration_list;
+ compound_statement -> statement_list;
+
+ statement_list -> statement;
+ statement_list -> statement_list;
+
+ selection_statement -> expression;
+ selection_statement -> statement;
+
+ iteration_statement -> expression;
+ iteration_statement -> statement;
+
+ jump_statement -> identifier;
+ jump_statement -> expression;
+
+ expression -> assignment_expression;
+ expression -> expression;
+
+ assignment_expression -> conditional_expression;
+ assignment_expression -> unary_expression;
+ assignment_expression -> assignment_operator;
+ assignment_expression -> assignment_expression;
+
+ conditional_expression -> logical_or_expression;
+ conditional_expression -> expression;
+ conditional_expression -> conditional_expression;
+
+ constant_expression -> conditional_expression;
+
+ logical_or_expression -> logical_and_expression;
+ logical_or_expression -> logical_or_expression;
+
+ logical_and_expression -> inclusive_or_expression;
+ logical_and_expression -> logical_and_expression;
+
+ inclusive_or_expression -> exclusive_or_expression;
+ inclusive_or_expression -> inclusive_or_expression;
+
+ exclusive_or_expression -> and_expression;
+ exclusive_or_expression -> exclusive_or_expression;
+
+ and_expression -> equality_expression;
+ and_expression -> and_expression;
+
+ equality_expression -> relation_expression;
+ equality_expression -> equality_expression;
+
+ relational_expression -> shift_expression;
+ relational_expression -> relational_expression;
+
+ shift_expression -> additive_expression;
+ shift_expression -> shift_expression;
+
+ additive_expression -> multiplicative_expression;
+ additive_expression -> additive_expression;
+
+ multiplicative_expression -> cast_expression;
+ multiplicative_expression -> multiplicative_expression;
+
+ cast_expression -> unary_expression;
+ cast_expression -> type_name;
+ cast_expression -> cast_expression;
+
+ unary_expression -> postfix_expression;
+ unary_expression -> unary_expression;
+ unary_expression -> cast_expression;
+ unary_expression -> unary_operator;
+ unary_expression -> type_name;
+
+ postfix_expression -> primary_expression;
+ postfix_expression -> postfix_expression;
+ postfix_expression -> expression;
+ postfix_expression -> argument_expression_list;
+ postfix_expression -> identifier;
+
+ primary_expression -> identifier;
+ primary_expression -> constant;
+ primary_expression -> string;
+ primary_expression -> expression;
+
+ argument_expression_list -> assignment_expression;
+ argument_expression_list -> argument_expression_list;
+
+ constant -> integer_constant;
+ constant -> character_constant;
+ constant -> floating_constant;
+ constant -> enumeration_constant;
+
+ # expr [label = "expression", fillcolor="#26c326", style=filled];
+ # assignexpr [label = "assignment-expression", fillcolor="#26c326", style=filled];
+ # condexpr [label = "conditional-expression", fillcolor="#26c326", style=filled];
+ # assignop [label = "assignment-operator", fillcolor="#26c326", style=filled];
+ # unaryexpr [label = "unary-expression", fillcolor="#26c326", style=filled];
+
+ # pfixexpr [label = "postfix-expression", fillcolor="#26c326", style=filled];
+ # castexpr [label = "cast-expression", fillcolor="#26c326", style=filled];
+ # unaryop [label = "unary-operator", fillcolor="#d2d2d2", style=filled];
+
+ # priexpr [label = "primary-expression", fillcolor="#26c326", style=filled];
+ # argexprlist [label = "argument-expression-list", fillcolor="#26c326", style=filled];
+
+ # identifier [label = "identifier", fillcolor="#26c326", style=filled];
+ # constant [label = "constant", fillcolor="#26c326", style=filled];
+ # string [label = "string", fillcolor="#26c326", style=filled];
+ # typename [label = "type-name"];
+
+ # logorexpr [label = "logical-OR-expression", fillcolor="#26c326", style=filled];
+ # logandexpr [label = "logical-AND-expression", fillcolor="#26c326", style=filled];
+ # incorexpr [label = "inclusive-OR-expression", fillcolor="#26c326", style=filled];
+ # excorexpr [label = "exclusive-OR-expression", fillcolor="#26c326", style=filled];
+ # andexpr [label = "AND-expression", fillcolor="#26c326", style=filled];
+ # eqexpr [label = "equality-expression", fillcolor="#26c326", style=filled];
+ # relexpr [label = "relational-expression", fillcolor="#26c326", style=filled];
+ # shiftexpr [label = "shift-expression", fillcolor="#26c326", style=filled];
+ # addexpr [label = "additive-expression", fillcolor="#26c326", style=filled];
+ # mulexpr [label = "multiplicative-expression", fillcolor="#26c326", style=filled];
+
+ # expr -> assignexpr;
+ # assignexpr -> condexpr;
+ # assignexpr -> unaryexpr;
+ # assignexpr -> assignexpr;
+ # assignexpr -> assignop;
+
+ # unaryexpr -> unaryop;
+ # unaryexpr -> castexpr;
+ # unaryexpr -> pfixexpr;
+ # unaryexpr -> unaryexpr;
+ # unaryexpr -> typename;
+
+ # condexpr -> logorexpr;
+ # condexpr -> expr;
+ # condexpr -> condexpr;
+
+ # logorexpr -> logorexpr;
+ # logorexpr -> logandexpr;
+
+ # logandexpr -> logandexpr;
+ # logandexpr -> incorexpr;
+
+ # incorexpr -> incorexpr;
+ # incorexpr -> excorexpr;
+
+ # excorexpr -> excorexpr;
+ # excorexpr -> andexpr;
+
+ # andexpr -> andexpr;
+ # andexpr -> eqexpr;
+
+ # eqexpr -> relexpr;
+ # eqexpr -> eqexpr;
+
+ # relexpr -> shiftexpr;
+ # relexpr -> relexpr;
+
+ # shiftexpr -> addexpr;
+ # shiftexpr -> shiftexpr;
+
+ # addexpr -> addexpr;
+ # addexpr -> mulexpr;
+
+ # mulexpr -> castexpr;
+ # mulexpr -> mulexpr;
+
+ # castexpr -> unaryexpr;
+ # castexpr -> castexpr;
+ # castexpr -> typename;
+
+ # pfixexpr -> priexpr;
+ # pfixexpr -> pfixexpr;
+ # pfixexpr -> expr;
+ # pfixexpr -> identifier;
+ # pfixexpr -> argexprlist;
+
+ # argexprlist -> argexprlist;
+ # argexprlist -> assignexpr;
+
+ # priexpr -> identifier;
+ # priexpr -> constant;
+ # priexpr -> string;
+ # priexpr -> expr;
}