@@ -17,54 +17,37 @@ sealed interface Token {
1717 value class Variable (val value : String ) : Operand
1818 }
1919
20- sealed class Operator ( val priority : Int , val associativity : Associativity ) : Token {
21- object Plus : Operator( 6 , Associativity . LEFT )
22- object Minus : Operator( 6 , Associativity . LEFT )
23- object Multiplication : Operator( 7 , Associativity . LEFT )
24- object Division : Operator( 7 , Associativity . LEFT )
25- object Modulo : Operator( 7 , Associativity . LEFT )
26- object Power : Operator( 9 , Associativity . RIGHT )
27- object UnaryMinus : Operator( 8 , Associativity . RIGHT )
28- object UnaryPlus : Operator( 8 , Associativity . RIGHT )
29-
30- object And : Operator( 3 , Associativity . LEFT )
31- object Or : Operator( 2 , Associativity . LEFT )
32- object Not : Operator( 4 , Associativity . LEFT )
33-
34- object GreaterThan : Operator( 5 , Associativity . LEFT ) //>
35- object GreaterEqualThan : Operator( 5 , Associativity . LEFT ) //>=
36- object LessThan : Operator( 5 , Associativity . LEFT ) //<
37- object LessEqualThan : Operator( 5 , Associativity . LEFT ) //<=
38- object Equal : Operator( 5 , Associativity . LEFT ) //==
39- object NotEqual : Operator( 5 , Associativity . LEFT ) //!=
40-
41- object TernaryIf : Operator( 1 , Associativity . RIGHT )
42- object TernaryElse : Operator( 1 , Associativity . LEFT )
43- object TernaryIfElse : Operator( 1 , Associativity . RIGHT )
20+ sealed interface Operator : Token {
21+ object Plus : Operator
22+ object Minus : Operator
23+ object Multiplication : Operator
24+ object Division : Operator
25+ object Modulo : Operator
26+ object Power : Operator
27+ object UnaryMinus : Operator
28+ object UnaryPlus : Operator
29+
30+ object And : Operator
31+ object Or : Operator
32+ object Not : Operator
33+
34+ object GreaterThan : Operator //>
35+ object GreaterEqualThan : Operator //>=
36+ object LessThan : Operator //<
37+ object LessEqualThan : Operator //<=
38+ object Equal : Operator //==
39+ object NotEqual : Operator //!=
40+
41+ object TernaryIf : Operator
42+ object TernaryElse : Operator
43+ object TernaryIfElse : Operator
4444 }
4545
4646 data class FunctionCall (
4747 val argsCount : Int ,
4848 val function : Function
4949 ) : Token {
5050
51- operator fun invoke (args : List <Operand >): Operand {
52- val functionArgs = mutableListOf<Any >()
53- args.forEach {
54- when (it) {
55- is Operand .Number -> functionArgs.add(it.value)
56- is Operand .Boolean -> functionArgs.add(it.value)
57- else -> error(" operand type ${it::class .simpleName} is not supported in function calls" )
58- }
59- }
60-
61- return when (val result = function(* functionArgs.toTypedArray())) {
62- is Number -> Operand .Number (result.toDouble())
63- is Boolean -> Operand .Boolean (result)
64- else -> error(" function return type ${result::class .simpleName} is not supported" )
65- }
66- }
67-
6851 operator fun invoke (args : List <Any >) = function(* args.toTypedArray())
6952
7053 object Delimiter: Token
@@ -74,6 +57,4 @@ sealed interface Token {
7457 object Left : Bracket()
7558 object Right : Bracket()
7659 }
77-
78- enum class Associativity { LEFT , RIGHT }
7960}
0 commit comments