Przeglądaj źródła

Add subscript operator

pull/1/head
Max Brunsfeld 11 lat temu
rodzic
commit
81d2af76bd
3 zmienionych plików z 9815 dodań i 7153 usunięć
  1. +7
    -2
      grammar.coffee
  2. +6
    -2
      grammar_test/expressions.txt
  3. +9802
    -7149
      src/parser.c

+ 7
- 2
grammar.coffee Wyświetl plik

@ -199,7 +199,8 @@ module.exports =
@identifier, @identifier,
@assignment, @assignment,
@field_access, @field_access,
@deref_field_access)
@deref_field_access,
@subscript_access)
deref: -> prec(10, seq("*", @expression)) deref: -> prec(10, seq("*", @expression))
address_of: -> prec(10, seq("&", @expression)) address_of: -> prec(10, seq("&", @expression))
@ -210,6 +211,9 @@ module.exports =
deref_field_access: -> seq( deref_field_access: -> seq(
@expression, "->", @identifier) @expression, "->", @identifier)
subscript_access: -> seq(
@expression, "[", @expression, "]")
function_call: -> seq( function_call: -> seq(
@expression, "(", err(commaSep(@expression)), ")") @expression, "(", err(commaSep(@expression)), ")")
@ -242,7 +246,8 @@ module.exports =
@deref, @deref,
@identifier, @identifier,
@field_access, @field_access,
@deref_field_access),
@deref_field_access,
@subscript_access),
"=", "=",
@expression)) @expression))

+ 6
- 2
grammar_test/expressions.txt Wyświetl plik

@ -39,6 +39,7 @@ Field access
int main() { int main() {
s.data1; s.data1;
p->data2; p->data2;
q[data3];
} }
--- ---
@ -46,7 +47,8 @@ int main() {
(function_declaration (identifier) (identifier) (formal_parameters) (function_declaration (identifier) (identifier) (formal_parameters)
(statement_block (statement_block
(expression_statement (field_access (identifier) (identifier))) (expression_statement (field_access (identifier) (identifier)))
(expression_statement (deref_field_access (identifier) (identifier)))))
(expression_statement (deref_field_access (identifier) (identifier)))
(expression_statement (subscript_access (identifier) (identifier)))))
============================================ ============================================
Boolean operators Boolean operators
@ -102,6 +104,7 @@ int main() {
b = *c = 2; b = *c = 2;
d.e = 3; d.e = 3;
f->g = 4; f->g = 4;
h[i] = j;
} }
--- ---
@ -111,7 +114,8 @@ int main() {
(var_declaration (storage_class) (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 (identifier) (assignment (deref (identifier)) (number))))
(expression_statement (assignment (field_access (identifier) (identifier)) (number))) (expression_statement (assignment (field_access (identifier) (identifier)) (number)))
(expression_statement (assignment (deref_field_access (identifier) (identifier)) (number)))))
(expression_statement (assignment (deref_field_access (identifier) (identifier)) (number)))
(expression_statement (assignment (subscript_access (identifier) (identifier)) (identifier)))))
============================================ ============================================
Pointer operations Pointer operations

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


Ładowanie…
Anuluj
Zapisz