Migrate not operator evaluator to Kotlin

This commit is contained in:
2020-03-07 16:56:06 +01:00
parent 2192a22fa5
commit 24eb2194cf
3 changed files with 35 additions and 1 deletions

View File

@@ -17,7 +17,8 @@ class DefaultEvaluator : Evaluator {
forward(ListEvaluator(), ListNode::class),
forward(MapEvaluator(), MapNode::class),
forward(MinusOperatorEvaluator(), MinusOperatorNode::class)
forward(MinusOperatorEvaluator(), MinusOperatorNode::class),
forward(NotOperatorEvaluator(), NotOperatorNode::class)
).evaluate(node, environment)
}
}

View File

@@ -1,6 +1,7 @@
package io.smnp.evaluation.evaluator
import io.smnp.dsl.ast.model.node.Node
import io.smnp.error.EvaluationException
import io.smnp.evaluation.environment.Environment
import io.smnp.evaluation.model.entity.EvaluatorOutput
import io.smnp.evaluation.model.enumeration.EvaluationResult
@@ -36,5 +37,19 @@ interface Evaluator {
}
}
}
fun assert(evaluator: Evaluator, expected: String): Evaluator {
return object : Evaluator {
override fun evaluate(node: Node, environment: Environment): EvaluatorOutput {
val output = evaluator.evaluate(node, environment)
if(output.result == EvaluationResult.FAILED) {
throw EvaluationException("Expected $expected", node.position)
}
return output
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
package io.smnp.evaluation.evaluator
import io.smnp.data.model.Value
import io.smnp.dsl.ast.model.node.Node
import io.smnp.dsl.ast.model.node.NotOperatorNode
import io.smnp.evaluation.environment.Environment
import io.smnp.evaluation.evaluator.Evaluator.Companion.assert
import io.smnp.evaluation.model.entity.EvaluatorOutput
class NotOperatorEvaluator : Evaluator {
override fun evaluate(node: Node, environment: Environment): EvaluatorOutput {
val evaluator = BoolLiteralEvaluator()
val (_, operandNode) = (node as NotOperatorNode)
val operand = assert(evaluator, "bool").evaluate(operandNode, environment)
return EvaluatorOutput.value(Value.bool(!(operand.value!!.value as Boolean)))
}
}