Migrate not operator evaluator to Kotlin
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user