Przeglądaj źródła

Add storage classes to function defs

pull/1/head
Max Brunsfeld 11 lat temu
rodzic
commit
845921d558
4 zmienionych plików z 9019 dodań i 8843 usunięć
  1. +6
    -3
      grammar.coffee
  2. +14
    -6
      grammar_test/declarations.txt
  3. +1
    -1
      grammar_test/expressions.txt
  4. +8998
    -8833
      src/parser.c

+ 6
- 3
grammar.coffee Wyświetl plik

@ -58,9 +58,7 @@ module.exports =
";")
var_declaration: -> seq(
repeat(choice(
keyword("static"),
keyword("extern"))),
optional(@storage_class),
@type,
commaSep1(choice(
@type_expression,
@ -68,6 +66,7 @@ module.exports =
";")
function_declaration: -> seq(
optional(@storage_class),
@type,
@type_expression,
"(", @formal_parameters, ")",
@ -175,6 +174,10 @@ module.exports =
enum_value: -> seq(
@identifier, optional(seq("=", @expression)))
storage_class: -> repeat(choice(
keyword("static"),
keyword("extern"))),
field: -> seq(@type, @type_expression)
var_assignment: -> seq(@type_expression, "=", @expression)

+ 14
- 6
grammar_test/declarations.txt Wyświetl plik

@ -127,15 +127,23 @@ Function declarations
============================================
int main(int argc, const char **argv);
static foo bar();
---
(function_declaration
(identifier)
(identifier)
(formal_parameters
(field (identifier) (identifier))
(field (type (identifier)) (pointer_type (pointer_type (identifier))))))
(program
(function_declaration
(identifier)
(identifier)
(formal_parameters
(field (identifier) (identifier))
(field (type (identifier)) (pointer_type (pointer_type (identifier))))))
(function_declaration
(storage_class)
(identifier)
(identifier)
(formal_parameters)))
============================================
Function definitions

+ 1
- 1
grammar_test/expressions.txt Wyświetl plik

@ -108,7 +108,7 @@ int main() {
(function_declaration (identifier) (identifier) (formal_parameters)
(statement_block
(var_declaration (identifier) (var_assignment (identifier) (number)))
(var_declaration (storage_class) (identifier) (var_assignment (identifier) (number)))
(expression_statement (assignment (identifier) (assignment (deref (identifier)) (number))))
(expression_statement (assignment (field_access (identifier) (identifier)) (number)))
(expression_statement (assignment (deref_field_access (identifier) (identifier)) (number)))))

+ 8998
- 8833
src/parser.c
Plik diff jest za duży
Wyświetl plik


Ładowanie…
Anuluj
Zapisz