diff options
| author | Ganesh Viswanathan <dev@genotrance.com> | 2018-12-26 23:46:09 -0600 |
|---|---|---|
| committer | Ganesh Viswanathan <dev@genotrance.com> | 2018-12-26 23:46:09 -0600 |
| commit | 9b93fb6561ff5b170b73979e18626e78c770b78c (patch) | |
| tree | 7c894522ec4a9595fc3369df98cd1f1ef198c988 | |
| parent | 33a3f6fc8b159340f2b29d0ba4aff3fe6c839f66 (diff) | |
| download | nimterop-9b93fb6561ff5b170b73979e18626e78c770b78c.tar.gz nimterop-9b93fb6561ff5b170b73979e18626e78c770b78c.zip | |
Reduce redundancy in grammar
| -rw-r--r-- | nimterop/grammar.nim | 146 |
1 files changed, 38 insertions, 108 deletions
diff --git a/nimterop/grammar.nim b/nimterop/grammar.nim index 66f7ee1..aa364b1 100644 --- a/nimterop/grammar.nim +++ b/nimterop/grammar.nim @@ -24,12 +24,7 @@ proc initGrammar() = gStateRT.constStr &= &" {name}* = {val}\n" )) - # typedef int X - # typedef X Y - # typedef struct X Y - # typedef ?* Y - gStateRT.grammar.add((""" - (type_definition + let typeGrammar = """ (primitive_type|type_identifier?) (sized_type_specifier? (primitive_type?) @@ -37,6 +32,15 @@ proc initGrammar() = (struct_specifier|union_specifier|enum_specifier? (type_identifier) ) + """ + + # typedef int X + # typedef X Y + # typedef struct X Y + # typedef ?* Y + gStateRT.grammar.add((&""" + (type_definition + {typeGrammar} (type_identifier?) (pointer_declarator? (type_identifier) @@ -96,30 +100,24 @@ proc initGrammar() = gStateRT.typeStr &= &" {fname}*: {ftyp}\n" i += 2 + let fieldGrammar = """ + (field_identifier?) + (array_declarator? + (field_identifier) + (identifier|number_literal) + ) + """ + # struct X {} - gStateRT.grammar.add((""" + gStateRT.grammar.add((&""" (struct_specifier|union_specifier (type_identifier) (field_declaration_list (field_declaration+ - (primitive_type|type_identifier?) - (sized_type_specifier? - (primitive_type?) - ) - (struct_specifier|union_specifier|enum_specifier? - (type_identifier) - ) - (field_identifier?) + {typeGrammar} + {fieldGrammar} (pointer_declarator? - (field_identifier?) - (array_declarator? - (field_identifier) - (identifier|number_literal) - ) - ) - (array_declarator? - (field_identifier) - (identifier|number_literal) + {fieldGrammar} ) ) ) @@ -130,34 +128,9 @@ proc initGrammar() = )) # typedef struct X {} - gStateRT.grammar.add((""" + gStateRT.grammar.add((&""" (type_definition - (struct_specifier|union_specifier - (type_identifier?) - (field_declaration_list - (field_declaration+ - (primitive_type|type_identifier?) - (sized_type_specifier? - (primitive_type?) - ) - (struct_specifier|union_specifier|enum_specifier? - (type_identifier) - ) - (field_identifier?) - (pointer_declarator? - (field_identifier?) - (array_declarator? - (field_identifier) - (identifier|number_literal) - ) - ) - (array_declarator? - (field_identifier) - (identifier|number_literal) - ) - ) - ) - ) + {gStateRT.grammar[^1].grammar} (type_identifier) ) """, @@ -231,20 +204,9 @@ proc initGrammar() = )) # typedef enum {} X - gStateRT.grammar.add((""" + gStateRT.grammar.add((&""" (type_definition - (enum_specifier - (type_identifier?) - (enumerator_list - (enumerator+ - (identifier) - (number_literal?) - (math_expression? - (number_literal) - ) - ) - ) - ) + {gStateRT.grammar[^1].grammar} (type_identifier) ) """, @@ -258,33 +220,13 @@ proc initGrammar() = pEnumCommon(ast, node, gStateRT.data[^1].val, offset, 1) )) - # typ function(typ param1, ...) - gStateRT.grammar.add((""" - (declaration - (storage_class_specifier?) - (type_qualifier?) - (primitive_type|type_identifier?) - (sized_type_specifier? - (primitive_type?) - ) - (struct_specifier|union_specifier? - (type_identifier) - ) + let funcGrammar = &""" (function_declarator? (identifier) (parameter_list (parameter_declaration* (type_qualifier?) - (primitive_type|type_identifier?) - (sized_type_specifier? - (primitive_type?) - ) - (struct_specifier|union_specifier? - (type_identifier) - ) - (enum_specifier? - (type_identifier) - ) + {typeGrammar} (identifier?) (pointer_declarator? (identifier) @@ -292,29 +234,17 @@ proc initGrammar() = ) ) ) + """ + + # typ function(typ param1, ...) + gStateRT.grammar.add((&""" + (declaration + (storage_class_specifier?) + (type_qualifier?) + {typeGrammar} + {funcGrammar} (pointer_declarator? - (function_declarator - (identifier) - (parameter_list - (parameter_declaration* - (type_qualifier?) - (primitive_type|type_identifier?) - (sized_type_specifier? - (primitive_type?) - ) - (struct_specifier|union_specifier? - (type_identifier) - ) - (enum_specifier? - (type_identifier) - ) - (identifier?) - (pointer_declarator? - (identifier) - ) - ) - ) - ) + {funcGrammar} ) ) """, |
