Migrate type parser to Kotlin
This commit is contained in:
14
src/main/kotlin/dsl/ast/model/node/TypeNode.kt
Normal file
14
src/main/kotlin/dsl/ast/model/node/TypeNode.kt
Normal 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
|
||||
}
|
||||
}
|
||||
5
src/main/kotlin/dsl/ast/model/node/TypeSpecifierNode.kt
Normal file
5
src/main/kotlin/dsl/ast/model/node/TypeSpecifierNode.kt
Normal 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)
|
||||
5
src/main/kotlin/dsl/ast/model/node/TypeSpecifiersNode.kt
Normal file
5
src/main/kotlin/dsl/ast/model/node/TypeSpecifiersNode.kt
Normal 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)
|
||||
17
src/main/kotlin/dsl/ast/parser/TypeParser.kt
Normal file
17
src/main/kotlin/dsl/ast/parser/TypeParser.kt
Normal 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)
|
||||
}
|
||||
}
|
||||
8
src/main/kotlin/dsl/ast/parser/TypeSpecifierParser.kt
Normal file
8
src/main/kotlin/dsl/ast/parser/TypeSpecifierParser.kt
Normal 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)
|
||||
})
|
||||
Reference in New Issue
Block a user