Skip to content

Commit ab9e313

Browse files
committed
removed old implementation
1 parent 0cbb8ce commit ab9e313

File tree

18 files changed

+32
-1288
lines changed

18 files changed

+32
-1288
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ fun main() {
202202

203203
By default, the library does the following steps to evaluate an expression:
204204
1. Tokenizing - splitting the expression into a list of units (operations, numbers, constants, function calls, etc.)
205-
2. Converting the expression from [infix](https://en.wikipedia.org/wiki/Infix_notation) to [postifx notation](https://en.wikipedia.org/wiki/Reverse_Polish_notation).
206-
3. Evaluating the postfix expression.
205+
2. Converting the expression from [infix notation](https://en.wikipedia.org/wiki/Infix_notation) to [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree).
206+
3. Evaluating the abstract syntax tree.
207207

208208
In case you have an expression with variables, it might make sense to preprocess the expression (do steps 1 and 2 in advance) to improve the performance:
209209
```kotlin

src/commonMain/kotlin/com/github/murzagalin/evaluator/BaseEvaluator.kt

Lines changed: 0 additions & 149 deletions
This file was deleted.

src/commonMain/kotlin/com/github/murzagalin/evaluator/BooleanEvaluator.kt

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/commonMain/kotlin/com/github/murzagalin/evaluator/Converter.kt

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/commonMain/kotlin/com/github/murzagalin/evaluator/DoubleEvaluator.kt

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/commonMain/kotlin/com/github/murzagalin/evaluator/PreprocessedExpression.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/commonMain/kotlin/com/github/murzagalin/evaluator/ast/AstEvaluator.kt

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.github.murzagalin.evaluator.ast
33
import com.github.murzagalin.evaluator.Token
44
import kotlin.math.pow
55

6-
class AstEvaluator(private val values: Map<String, Any> = emptyMap()): AstVisitor {
6+
internal class AstEvaluator(private val values: Map<String, Any> = emptyMap()): AstVisitor {
77

88
fun evaluate(expression: Expression) = expression.visit(this)
99

@@ -37,36 +37,35 @@ class AstEvaluator(private val values: Map<String, Any> = emptyMap()): AstVisito
3737
}
3838
}
3939

40-
override fun visitBinary(binary: Expression.Binary): Any {
41-
return when (binary.token) {
42-
Token.Operator.LessThan -> binaryOnNumbers(binary,"<") { left, right -> left < right }
43-
Token.Operator.LessEqualThan -> binaryOnNumbers(binary,"<=") { left, right -> left <= right }
44-
Token.Operator.GreaterThan -> binaryOnNumbers(binary,">") { left, right -> left > right }
45-
Token.Operator.GreaterEqualThan -> binaryOnNumbers(binary,">=") { left, right -> left >= right }
46-
Token.Operator.Equal -> {
47-
val left = evaluate(binary.leftExpression)
48-
val right = evaluate(binary.rightExpression)
49-
left == right
50-
}
51-
Token.Operator.NotEqual -> {
52-
val left = evaluate(binary.leftExpression)
53-
val right = evaluate(binary.rightExpression)
54-
left != right
55-
}
56-
Token.Operator.And -> binaryOnBooleans(binary, "&&") { left, right -> left && right}
57-
Token.Operator.Or -> binaryOnBooleans(binary, "||") { left, right -> left || right}
58-
Token.Operator.Plus -> binaryOnNumbers(binary, "+") { left, right -> left + right }
59-
Token.Operator.Minus -> binaryOnNumbers(binary,"-") { left, right -> left - right }
60-
Token.Operator.Modulo -> binaryOnNumbers(binary,"%") { left, right -> left % right }
61-
Token.Operator.Multiplication -> binaryOnNumbers(binary,"*") { left, right -> left * right }
62-
Token.Operator.Division -> binaryOnNumbers(binary,"/") { left, right -> left / right }
63-
Token.Operator.Power -> binaryOnNumbers(binary,"^") { left, right -> left.pow(right) }
64-
else -> {
65-
error("${binary.token} was incorrectly parsed as a binary operator")
66-
}
40+
override fun visitBinary(binary: Expression.Binary) = when (binary.token) {
41+
Token.Operator.LessThan -> binaryOnNumbers(binary,"<") { left, right -> left < right }
42+
Token.Operator.LessEqualThan -> binaryOnNumbers(binary,"<=") { left, right -> left <= right }
43+
Token.Operator.GreaterThan -> binaryOnNumbers(binary,">") { left, right -> left > right }
44+
Token.Operator.GreaterEqualThan -> binaryOnNumbers(binary,">=") { left, right -> left >= right }
45+
Token.Operator.Equal -> {
46+
val left = evaluate(binary.leftExpression)
47+
val right = evaluate(binary.rightExpression)
48+
left == right
49+
}
50+
Token.Operator.NotEqual -> {
51+
val left = evaluate(binary.leftExpression)
52+
val right = evaluate(binary.rightExpression)
53+
left != right
54+
}
55+
Token.Operator.And -> binaryOnBooleans(binary, "&&") { left, right -> left && right}
56+
Token.Operator.Or -> binaryOnBooleans(binary, "||") { left, right -> left || right}
57+
Token.Operator.Plus -> binaryOnNumbers(binary, "+") { left, right -> left + right }
58+
Token.Operator.Minus -> binaryOnNumbers(binary,"-") { left, right -> left - right }
59+
Token.Operator.Modulo -> binaryOnNumbers(binary,"%") { left, right -> left % right }
60+
Token.Operator.Multiplication -> binaryOnNumbers(binary,"*") { left, right -> left * right }
61+
Token.Operator.Division -> binaryOnNumbers(binary,"/") { left, right -> left / right }
62+
Token.Operator.Power -> binaryOnNumbers(binary,"^") { left, right -> left.pow(right) }
63+
else -> {
64+
error("${binary.token} was incorrectly parsed as a binary operator")
6765
}
6866
}
6967

68+
7069
private fun binaryOnBooleans(binary: Expression.Binary, strRep: String, eval: (Boolean, Boolean) -> Any): Any {
7170
val left = evaluate(binary.leftExpression)
7271
val right = evaluate(binary.rightExpression)

src/commonMain/kotlin/com/github/murzagalin/evaluator/ast/BooleanAstEvaluator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.murzagalin.evaluator.ast
22

3-
class BooleanAstEvaluator {
3+
internal class BooleanAstEvaluator {
44

55
fun evaluate(expression: Expression, values: Map<String, Any> = emptyMap()): Boolean {
66
val baseEvaluator = AstEvaluator(values)

src/commonMain/kotlin/com/github/murzagalin/evaluator/ast/DoubleAstEvaluator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.murzagalin.evaluator.ast
22

3-
class DoubleAstEvaluator {
3+
internal class DoubleAstEvaluator {
44

55
fun evaluate(expression: Expression, values: Map<String, Any> = emptyMap()): Double {
66
val baseEvaluator = AstEvaluator(values)

src/commonMain/kotlin/com/github/murzagalin/evaluator/ast/Parser.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ boolean -> "true" | "false" | "TRUE" | "FALSE"
2323
number -> DIGIT ( DIGIT )*
2424
*/
2525

26-
class Parser {
26+
internal class Parser {
2727

2828
private val equalityTokens = setOf(Token.Operator.Equal, Token.Operator.NotEqual)
2929

0 commit comments

Comments
 (0)