@@ -406,6 +406,16 @@ def _parse_primary(stream: TokenStream, environment: Environment) -> model.Expre
406
406
raise stream .make_error ("expected primary expression or property" )
407
407
408
408
409
+ def _parse_postfix (stream : TokenStream , environment : Environment ) -> model .Expression :
410
+ expr = _parse_primary (stream , environment = environment )
411
+ while stream .accept (lexer .TokenType .LEFT_BRACKET ):
412
+ idx = parse_expression (stream , environment = environment )
413
+ expr = model .expressions .ArrayAccess (expr , idx )
414
+ if not stream .accept (lexer .TokenType .RIGHT_BRACKET ):
415
+ stream .make_error ("expected closing bracket" )
416
+ return expr
417
+
418
+
409
419
def _parse_unary (stream : TokenStream , environment : Environment ) -> model .Expression :
410
420
if stream .accept (lexer .TokenType .LOGIC_NOT ):
411
421
operand = _parse_unary (stream , environment = environment )
@@ -417,7 +427,7 @@ def _parse_unary(stream: TokenStream, environment: Environment) -> model.Express
417
427
# FIXME: proper error reporting
418
428
assert isinstance (operand , model .Expression )
419
429
return expressions .sub (expressions .ensure_expr (0 ), operand )
420
- return _parse_primary (stream , environment = environment )
430
+ return _parse_postfix (stream , environment )
421
431
422
432
423
433
DEFAULT_ENVIRONMENT = Environment ()
@@ -616,7 +626,7 @@ def parse_automaton(stream: TokenStream, ctx: model.Context) -> model.Automaton:
616
626
)
617
627
else :
618
628
raise stream .make_error ("unexpected token" )
619
- assert destinations , "missign destinations"
629
+ assert destinations , "missing destinations"
620
630
automaton .create_edge (
621
631
location_map [location_name ],
622
632
tuple (destinations ),
0 commit comments