fix: extract <ident> from <array-elem>
This commit is contained in:
parent
c5b02a00aa
commit
f5f6628c89
@ -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",
|
||||
`<ident>`,
|
||||
`<array-elem>`,
|
||||
`<ident-or-array-elem>`,
|
||||
Parens("(" ~> `<expr>` <~ ")")
|
||||
)
|
||||
private val `<ident>` = Ident(ident)
|
||||
private lazy val `<array-elem>` =
|
||||
ArrayElem(`<ident>` <~ "[", sepBy1(`<expr>`, "]" ~> "[") <~ "]")
|
||||
private lazy val `<ident-or-array-elem>` =
|
||||
`<ident>` <**> (`<array-indices>` </> identity)
|
||||
private val `<array-indices>` =
|
||||
some("[" ~> `<expr>` <~ "]") map { indices =>
|
||||
ArrayElem((_: Ident), indices)
|
||||
}
|
||||
|
||||
// Types
|
||||
private lazy val `<type>`: Parsley[Type] =
|
||||
@ -80,7 +83,8 @@ object parser {
|
||||
`<stmt>` <~ "end"
|
||||
)
|
||||
private lazy val `<param>` = Param(`<type>`, `<ident>`)
|
||||
private lazy val `<stmt>`: Parsley[List[Stmt]] = sepBy1(`<basic-stmt>`, ";")
|
||||
private lazy val `<stmt>`: Parsley[List[Stmt]] =
|
||||
sepBy1(`<basic-stmt>`, ";")
|
||||
private lazy val `<basic-stmt>` =
|
||||
(Skip from atomic("skip"))
|
||||
| Read(atomic("read") ~> `<lvalue>`)
|
||||
@ -99,7 +103,7 @@ object parser {
|
||||
| VarDecl(atomic(`<type>`), `<ident>` <~ "=", `<rvalue>`)
|
||||
| Assign(`<ident>` <~ "=", `<rvalue>`)
|
||||
private lazy val `<lvalue>`: Parsley[LValue] =
|
||||
atomic(`<pair-elem>`) | atomic(`<array-elem>`) | `<ident>`
|
||||
atomic(`<pair-elem>`) | atomic(`<ident-or-array-elem>`)
|
||||
private lazy val `<rvalue>`: Parsley[RValue] =
|
||||
atomic(`<array-liter>`) |
|
||||
atomic(
|
||||
|
Loading…
x
Reference in New Issue
Block a user