feat(ast): add syntax tree nodes
This commit is contained in:
1 parent
7a8b8dd898
commit
7660141d69
1 file changed
+48
@@ -0,0 +1,48 @@
|
|||||||
|
package lumen.ast
|
||||||
|
|
||||||
|
sealed class Expr {
|
||||||
|
abstract val line: Int
|
||||||
|
abstract val column: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class IntLiteral(val value: Long, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class DoubleLiteral(val value: Double, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class StringLiteral(val value: String, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class BoolLiteral(val value: Boolean, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class NilLiteral(override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
class ListLiteral(val elements: List<Expr>, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class MapLiteral(val entries: List<Pair<Expr, Expr>>, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
class Variable(val name: String, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class Assign(val name: String, val value: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
class Index(val target: Expr, val index: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class IndexAssign(val target: Expr, val index: Expr, val value: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
class Unary(val op: UnaryOp, val operand: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class Binary(val op: BinaryOp, val left: Expr, val right: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class Logical(val op: LogicalOp, val left: Expr, val right: Expr, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
class Call(val callee: Expr, val args: List<Expr>, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class MethodCall(val receiver: Expr, val method: String, val args: List<Expr>, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
class FunctionExpr(val name: String?, val params: List<String>, val body: List<Stmt>, override val line: Int, override val column: Int = 0) : Expr()
|
||||||
|
|
||||||
|
enum class UnaryOp { Negate, Not }
|
||||||
|
enum class BinaryOp { Add, Sub, Mul, Div, Mod, Equal, NotEqual, Less, LessEqual, Greater, GreaterEqual }
|
||||||
|
enum class LogicalOp { And, Or }
|
||||||
|
|
||||||
|
sealed class Stmt {
|
||||||
|
abstract val line: Int
|
||||||
|
abstract val column: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class LetStmt(val name: String, val initializer: Expr, val mutable: Boolean, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class ExprStmt(val expr: Expr, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class BlockStmt(val statements: List<Stmt>, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class IfStmt(val condition: Expr, val thenBranch: List<Stmt>, val elseBranch: List<Stmt>?, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class WhileStmt(val condition: Expr, val body: List<Stmt>, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class ForStmt(val name: String, val iterable: Expr, val body: List<Stmt>, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class ReturnStmt(val value: Expr?, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class FunctionStmt(val name: String, val function: FunctionExpr, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
|
class ImportStmt(val path: String, override val line: Int, override val column: Int = 0) : Stmt()
|
||||||
Reference in new issue
Block a user