Created Expr class
parent
d084a027c5
commit
fe245c1811
@ -0,0 +1,27 @@
|
|||||||
|
val types = listOf(
|
||||||
|
"Binary : Expr left, Token operator, Expr right",
|
||||||
|
"Grouping : Expr expression",
|
||||||
|
"Literal : Any value",
|
||||||
|
"Unary : Token operator, Expr right"
|
||||||
|
)
|
||||||
|
|
||||||
|
println("package fr.celticinfo.lox")
|
||||||
|
println()
|
||||||
|
println("sealed class Expr {")
|
||||||
|
println("}")
|
||||||
|
|
||||||
|
for (type in types) {
|
||||||
|
val parts = type.split(":")
|
||||||
|
val name = parts[0].trim()
|
||||||
|
val fields = parts[1].trim().split(",").map { it.trim() }
|
||||||
|
println()
|
||||||
|
println("data class $name(")
|
||||||
|
for (field in fields) {
|
||||||
|
val parts = field.split(" ")
|
||||||
|
val type = parts[0]
|
||||||
|
val name = parts[1]
|
||||||
|
val sep = if (field == fields.last()) "" else ","
|
||||||
|
println(" val $name: $type$sep")
|
||||||
|
}
|
||||||
|
println(") : Expr()")
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package fr.celticinfo.lox
|
||||||
|
|
||||||
|
sealed class Expr {
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Binary(
|
||||||
|
val left: Expr,
|
||||||
|
val operator: Token,
|
||||||
|
val right: Expr
|
||||||
|
) : Expr()
|
||||||
|
|
||||||
|
data class Grouping(
|
||||||
|
val expression: Expr
|
||||||
|
) : Expr()
|
||||||
|
|
||||||
|
data class Literal(
|
||||||
|
val value: Any
|
||||||
|
) : Expr()
|
||||||
|
|
||||||
|
data class Unary(
|
||||||
|
val operator: Token,
|
||||||
|
val right: Expr
|
||||||
|
) : Expr()
|
||||||
Loading…
Reference in New Issue