]> git.corax.cc Git - ccc/commitdiff
doc: Add entire C grammar to parser graph
authorMatthias Kruk <m@m10k.eu>
Sat, 11 Jul 2020 15:54:15 +0000 (00:54 +0900)
committerMatthias Kruk <m@m10k.eu>
Sat, 11 Jul 2020 16:07:46 +0000 (01:07 +0900)
doc/Makefile
doc/parser.dot

index 13d6b2612a6bc2f95c5a48e89c29882fb2da53ed..fc9426fe31967ef35d0c014602ad94817e152e76 100644 (file)
@@ -1,4 +1,12 @@
 GRAPHS = parser.png tokenizer.png
+PHONY = clean
+
+all: $(GRAPHS)
+
+clean:
+       rm -rf $(GRAPHS)
+
+.PHONY: $(PHONY)
 
 %.png: %.dot
        dot -Tpng -o$@ $<
index 07d331b52e9de40701766dc0cc8c01169e12803c..3d1ae385d2af16e4575bdb8524180f3694a49144 100644 (file)
 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", fillcolor="#d2d2d2", style=filled];
+  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 -> identifier;
+  enum_specifier -> enumerator_list;
+
+  enumerator_list -> enumerator;
+  enumerator_list -> enumerator_list;
+
+  enumerator -> identifier;
+  enumerator -> constant_expression;
+
+  declarator -> pointer;
+  declarator -> direct_declarator;
+
+  direct_declarator -> identifier;
+  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 -> identifier;
+  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 -> relational_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;
 }