From e3d32fdd138c57fdc7447bf7bc5a7b45acdfe4aa Mon Sep 17 00:00:00 2001 From: Paweł Dybiec Date: Fri, 9 Nov 2018 00:42:27 +0100 Subject: Support multiple indexing --- source/mod_student/parser.mly | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/source/mod_student/parser.mly b/source/mod_student/parser.mly index 7949ec8..c79181e 100644 --- a/source/mod_student/parser.mly +++ b/source/mod_student/parser.mly @@ -142,16 +142,10 @@ expression_unary: {EXPR_Unop {tag=mkTag ();loc=mkLocation $startpos; op=op;sub=right } } expression_highest_prec: - | node=expression_index { node } + | node=expression_base { node } | node=expression_call { node } | node=expression_length { node } -expression_index: - | sub=expression_base index=option( delimited(LSBRACKET,expression,RSBRACKET) ) - { - match index with - | None -> sub - | Some index -> EXPR_Index {tag=mkTag (); loc=mkLocation $startpos; expr=sub; index=index} - } + | node=expression_index { node } expression_base: | node=expression_identifier { node } | node=expression_integer { node } @@ -160,6 +154,11 @@ expression_base: | node=expression_bool { node } | node=expression_struct { node } | LPAREN node=expression RPAREN { node } +expression_index: + | sub=expression_base index=delimited(LSBRACKET,expression,RSBRACKET) + { EXPR_Index {tag=mkTag (); loc=mkLocation $startpos; expr=sub; index=index} } + | sub=expression_index index=delimited(LSBRACKET,expression,RSBRACKET) + { EXPR_Index {tag=mkTag (); loc=mkLocation $startpos; expr=sub; index=index} } expression_identifier: | id=identifier { EXPR_Id {tag= mkTag ();loc=mkLocation $startpos; id=id} } -- cgit 1.4.1