refactor: remove excessive atomics

This commit is contained in:
Gleb Koval 2025-02-01 21:05:42 +00:00
parent a110225c49
commit 0db7a30af0
Signed by: cyclane
GPG Key ID: 15E168A8B332382C

View File

@ -88,38 +88,34 @@ object parser {
private lazy val `<stmt>`: Parsley[NonEmptyList[Stmt]] = private lazy val `<stmt>`: Parsley[NonEmptyList[Stmt]] =
sepBy1(`<basic-stmt>`, ";") sepBy1(`<basic-stmt>`, ";")
private lazy val `<basic-stmt>` = private lazy val `<basic-stmt>` =
(Skip from atomic("skip")) (Skip from "skip")
| Read(atomic("read") ~> `<lvalue>`) | Read("read" ~> `<lvalue>`)
| Free(atomic("free") ~> `<expr>`) | Free("free" ~> `<expr>`)
| Return(atomic("return") ~> `<expr>`) | Return("return" ~> `<expr>`)
| Exit(atomic("exit") ~> `<expr>`) | Exit("exit" ~> `<expr>`)
| Print(atomic("print") ~> `<expr>`, pure(false)) | Print("print" ~> `<expr>`, pure(false))
| Print(atomic("println") ~> `<expr>`, pure(true)) | Print("println" ~> `<expr>`, pure(true))
| If( | If(
atomic("if") ~> `<expr>` <~ "then", "if" ~> `<expr>` <~ "then",
`<stmt>` <~ "else", `<stmt>` <~ "else",
`<stmt>` <~ "fi" `<stmt>` <~ "fi"
) )
| While(atomic("while") ~> `<expr>` <~ "do", `<stmt>` <~ "done") | While("while" ~> `<expr>` <~ "do", `<stmt>` <~ "done")
| Block(atomic("begin") ~> `<stmt>` <~ "end") | Block("begin" ~> `<stmt>` <~ "end")
| VarDecl(atomic(`<type>`), `<ident>` <~ "=", `<rvalue>`) | VarDecl(`<type>`, `<ident>` <~ "=", `<rvalue>`)
| Assign(`<ident>` <~ "=", `<rvalue>`) | Assign(`<ident>` <~ "=", `<rvalue>`)
private lazy val `<lvalue>`: Parsley[LValue] = private lazy val `<lvalue>`: Parsley[LValue] =
atomic(`<pair-elem>`) | atomic(`<ident-or-array-elem>`) `<pair-elem>` | `<ident-or-array-elem>`
private lazy val `<rvalue>`: Parsley[RValue] = private lazy val `<rvalue>`: Parsley[RValue] =
atomic(`<array-liter>`) | `<array-liter>` |
atomic(
NewPair( NewPair(
"newpair" ~> "(" ~> `<expr>` <~ ",", "newpair" ~> "(" ~> `<expr>` <~ ",",
`<expr>` <~ ")" `<expr>` <~ ")"
)
) | ) |
atomic(`<pair-elem>`) | `<pair-elem>` |
atomic(
Call( Call(
"call" ~> `<ident>` <~ "(", "call" ~> `<ident>` <~ "(",
sepBy(`<expr>`, ",") <~ ")" sepBy(`<expr>`, ",") <~ ")"
)
) | `<expr>` ) | `<expr>`
private lazy val `<pair-elem>` = private lazy val `<pair-elem>` =
Fst("fst" ~> `<lvalue>`) | Snd("snd" ~> `<lvalue>`) Fst("fst" ~> `<lvalue>`) | Snd("snd" ~> `<lvalue>`)