Migrate identifier and map parsers to Kotlin
This commit is contained in:
5
src/main/kotlin/dsl/ast/model/node/IdentifierNode.kt
Normal file
5
src/main/kotlin/dsl/ast/model/node/IdentifierNode.kt
Normal file
@@ -0,0 +1,5 @@
|
||||
package dsl.ast.model.node
|
||||
|
||||
import dsl.token.model.entity.Token
|
||||
|
||||
class IdentifierNode(token: Token) : AtomAbstractNode(token)
|
||||
14
src/main/kotlin/dsl/ast/model/node/MapEntryNode.kt
Normal file
14
src/main/kotlin/dsl/ast/model/node/MapEntryNode.kt
Normal file
@@ -0,0 +1,14 @@
|
||||
package dsl.ast.model.node
|
||||
|
||||
class MapEntryNode(key: Node, operator: Node, value: Node) : Node(2, operator.position) {
|
||||
val key: Node
|
||||
get() = children[0]
|
||||
|
||||
val value: Node
|
||||
get() = children[1]
|
||||
|
||||
init {
|
||||
children[0] = key
|
||||
children[1] = value
|
||||
}
|
||||
}
|
||||
5
src/main/kotlin/dsl/ast/model/node/MapNode.kt
Normal file
5
src/main/kotlin/dsl/ast/model/node/MapNode.kt
Normal file
@@ -0,0 +1,5 @@
|
||||
package dsl.ast.model.node
|
||||
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
|
||||
class MapNode(items: List<Node>, position: TokenPosition) : AbstractIterableNode(items, position)
|
||||
@@ -19,12 +19,10 @@ class AtomParser : Parser() {
|
||||
val literalParser = oneOf(
|
||||
listOf(
|
||||
parenthesesParser,
|
||||
BoolLiteralParser(),
|
||||
FloatLiteralParser(),
|
||||
IntegerLiteralParser(),
|
||||
NoteLiteralParser(),
|
||||
StringLiteralParser(),
|
||||
ListParser()
|
||||
IdentifierParser(),
|
||||
ListParser(),
|
||||
LiteralParser(),
|
||||
MapParser()
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
16
src/main/kotlin/dsl/ast/parser/IdentifierParser.kt
Normal file
16
src/main/kotlin/dsl/ast/parser/IdentifierParser.kt
Normal file
@@ -0,0 +1,16 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.ast.model.node.IdentifierNode
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class IdentifierParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
val identifierParser = terminal(TokenType.IDENTIFIER) { IdentifierNode(it) }
|
||||
|
||||
return oneOf(listOf(
|
||||
identifierParser
|
||||
)).parse(input)
|
||||
}
|
||||
}
|
||||
16
src/main/kotlin/dsl/ast/parser/LiteralParser.kt
Normal file
16
src/main/kotlin/dsl/ast/parser/LiteralParser.kt
Normal file
@@ -0,0 +1,16 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.token.model.entity.TokenList
|
||||
|
||||
class LiteralParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
return oneOf(listOf(
|
||||
BoolLiteralParser(),
|
||||
FloatLiteralParser(),
|
||||
IntegerLiteralParser(),
|
||||
NoteLiteralParser(),
|
||||
StringLiteralParser()
|
||||
)).parse(input)
|
||||
}
|
||||
}
|
||||
23
src/main/kotlin/dsl/ast/parser/MapEntryParser.kt
Normal file
23
src/main/kotlin/dsl/ast/parser/MapEntryParser.kt
Normal file
@@ -0,0 +1,23 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.ast.model.node.MapEntryNode
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class MapEntryParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
val keyParser = oneOf(listOf(
|
||||
LiteralParser(),
|
||||
IdentifierParser()
|
||||
))
|
||||
|
||||
return allOf(listOf(
|
||||
keyParser,
|
||||
terminal(TokenType.ARROW),
|
||||
assert(ExpressionParser(), "expression")
|
||||
)) {
|
||||
MapEntryNode(it[0], it[1], it[2])
|
||||
}.parse(input)
|
||||
}
|
||||
}
|
||||
8
src/main/kotlin/dsl/ast/parser/MapParser.kt
Normal file
8
src/main/kotlin/dsl/ast/parser/MapParser.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.node.MapNode
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class MapParser : AbstractIterableParser(TokenType.OPEN_CURLY, MapEntryParser(), TokenType.CLOSE_CURLY, {
|
||||
list, tokenPosition -> MapNode(list, tokenPosition)
|
||||
})
|
||||
Reference in New Issue
Block a user