Explorar el Código

Add subscript operator

pull/1/head
Max Brunsfeld hace 11 años
padre
commit
81d2af76bd
Se han modificado 3 ficheros con 9815 adiciones y 7153 borrados
  1. +7
    -2
      grammar.coffee
  2. +6
    -2
      grammar_test/expressions.txt
  3. +9802
    -7149
      src/parser.c

+ 7
- 2
grammar.coffee Ver fichero

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

+ 6
- 2
grammar_test/expressions.txt Ver fichero

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

+ 9802
- 7149
src/parser.c
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


Cargando…
Cancelar
Guardar