diff --git a/src/main/wacc/parser.scala b/src/main/wacc/parser.scala index c9422d7..c33cbc8 100644 --- a/src/main/wacc/parser.scala +++ b/src/main/wacc/parser.scala @@ -2,7 +2,7 @@ package wacc import parsley.Result import parsley.Parsley -import parsley.Parsley.{atomic, many, pure} +import parsley.Parsley.{atomic, many, pure, some} import parsley.combinator.{countSome, sepBy, sepBy1} import parsley.expr.{precedence, SOps, InfixL, InfixN, InfixR, Prefix, Atoms} @@ -44,13 +44,16 @@ object parser { CharLiter(charLit), StrLiter(stringLit), PairLiter from "null", - ``, - ``, + ``, Parens("(" ~> `` <~ ")") ) private val `` = Ident(ident) - private lazy val `` = - ArrayElem(`` <~ "[", sepBy1(``, "]" ~> "[") <~ "]") + private lazy val `` = + `` <**> (`` identity) + private val `` = + some("[" ~> `` <~ "]") map { indices => + ArrayElem((_: Ident), indices) + } // Types private lazy val ``: Parsley[Type] = @@ -80,7 +83,8 @@ object parser { `` <~ "end" ) private lazy val `` = Param(``, ``) - private lazy val ``: Parsley[List[Stmt]] = sepBy1(``, ";") + private lazy val ``: Parsley[List[Stmt]] = + sepBy1(``, ";") private lazy val `` = (Skip from atomic("skip")) | Read(atomic("read") ~> ``) @@ -99,7 +103,7 @@ object parser { | VarDecl(atomic(``), `` <~ "=", ``) | Assign(`` <~ "=", ``) private lazy val ``: Parsley[LValue] = - atomic(``) | atomic(``) | `` + atomic(``) | atomic(``) private lazy val ``: Parsley[RValue] = atomic(``) | atomic(