Migrate factor parser to Kotlin

This commit is contained in:
2020-03-05 20:44:40 +01:00
parent e854ac1619
commit 0d3cd2f430
4 changed files with 38 additions and 1 deletions

View File

@@ -2,5 +2,5 @@ import interpreter.Interpreter
fun main(args: Array<String>) {
val interpreter = Interpreter()
interpreter.run("true 123 -\"fsfsef\".13.15 @c:14 3.14")
interpreter.run("true ** 123 ** 4 -\"fsfsef\".13.15 @c:14 3.14")
}

View File

@@ -0,0 +1,3 @@
package dsl.ast.model.node
class NotOperatorNode(operator: Node, operand: Node) : UnaryOperatorAbstractNode(operator, operand)

View File

@@ -0,0 +1,3 @@
package dsl.ast.model.node
class PowerOperatorNode(lhs: Node, operator: Node, rhs: Node) : BinaryOperatorAbstractNode(lhs, operator, rhs)

View File

@@ -0,0 +1,31 @@
package dsl.ast.parser
import dsl.ast.model.entity.ParserOutput
import dsl.ast.model.node.NotOperatorNode
import dsl.ast.model.node.PowerOperatorNode
import dsl.token.model.entity.TokenList
import dsl.token.model.enumeration.TokenType
class FactorParser : Parser() {
override fun tryToParse(input: TokenList): ParserOutput {
val factorParser = leftAssociativeOperator(
UnitParser(),
listOf(TokenType.DOUBLE_ASTERISK),
UnitParser()
) { lhs, operator, rhs ->
PowerOperatorNode(lhs, operator, rhs)
}
val notOperatorParser = allOf(listOf(
terminal(TokenType.NOT),
factorParser
)) {
NotOperatorNode(it[0], it[1])
}
return oneOf(listOf(
notOperatorParser,
factorParser
)).parse(input)
}
}