Created Expr class

main
oabrivard 2 years ago
parent d084a027c5
commit fe245c1811

@ -5,7 +5,8 @@
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$USER_HOME$/.sdkman/candidates/gradle/8.5" />
<option name="gradleHome" value="/usr/local/Cellar/gradle/8.8_1/libexec" />
<option name="gradleJvm" value="corretto-21" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

@ -11,6 +11,7 @@ repositories {
dependencies {
testImplementation(kotlin("test"))
implementation(kotlin("script-runtime"))
}
sourceSets {

@ -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…
Cancel
Save