Migrate type parser to Kotlin

This commit is contained in:
2020-03-06 19:09:27 +01:00
parent e8d57629e3
commit f46fcdfc6a
5 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
package dsl.ast.model.node
class TypeNode(type: Node, specifiers: Node) : Node(2, type.position) {
val type: Node
get() = children[0]
val specifiers: Node
get() = children[1]
init {
children[0] = type
children[1] = specifiers
}
}

View File

@@ -0,0 +1,5 @@
package dsl.ast.model.node
import dsl.token.model.entity.TokenPosition
class TypeSpecifierNode(items: List<Node>, position: TokenPosition) : AbstractIterableNode(items, position)

View File

@@ -0,0 +1,5 @@
package dsl.ast.model.node
import dsl.token.model.entity.TokenPosition
class TypeSpecifiersNode(specifiers: List<Node>, position: TokenPosition) : Node(specifiers, position)

View File

@@ -0,0 +1,17 @@
package dsl.ast.parser
import dsl.ast.model.entity.ParserOutput
import dsl.ast.model.node.TypeNode
import dsl.ast.model.node.TypeSpecifiersNode
import dsl.token.model.entity.TokenList
class TypeParser : Parser() {
override fun tryToParse(input: TokenList): ParserOutput {
return allOf(listOf(
SimpleIdentifierParser(),
optional(repeat(TypeSpecifierParser()) { list, tokenPosition -> TypeSpecifiersNode(list, tokenPosition) })
)) {
TypeNode(it[0], it[1])
}.parse(input)
}
}

View File

@@ -0,0 +1,8 @@
package dsl.ast.parser
import dsl.ast.model.node.TypeSpecifierNode
import dsl.token.model.enumeration.TokenType
class TypeSpecifierParser : AbstractIterableParser(TokenType.OPEN_ANGLE, TypeParser(), TokenType.CLOSE_ANGLE, {
list, tokenPosition -> TypeSpecifierNode(list, tokenPosition)
})