Migrate function definition parser to Kotlin
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package dsl.ast.model.node
|
||||
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
|
||||
class FunctionDefinitionArgumentsNode(items: List<Node>, position: TokenPosition) : AbstractIterableNode(items, position)
|
||||
20
src/main/kotlin/dsl/ast/model/node/FunctionDefinitionNode.kt
Normal file
20
src/main/kotlin/dsl/ast/model/node/FunctionDefinitionNode.kt
Normal file
@@ -0,0 +1,20 @@
|
||||
package dsl.ast.model.node
|
||||
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
|
||||
class FunctionDefinitionNode(identifier: Node, arguments: Node, body: Node, position: TokenPosition) : Node(3, position) {
|
||||
val identifier: Node
|
||||
get() = children[0]
|
||||
|
||||
val arguments: Node
|
||||
get() = children[1]
|
||||
|
||||
val body: Node
|
||||
get() = children[2]
|
||||
|
||||
init {
|
||||
children[0] = identifier
|
||||
children[1] = arguments
|
||||
children[2] = body
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.token.model.entity.TokenList
|
||||
|
||||
class FunctionDefinitionArgumentParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
return oneOf(listOf(
|
||||
OptionalFunctionDefinitionArgumentParser(),
|
||||
RegularFunctionDefinitionArgumentParser()
|
||||
)).parse(input)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.node.FunctionDefinitionArgumentsNode
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class FunctionDefinitionArgumentsParser : AbstractIterableParser(TokenType.OPEN_PAREN, FunctionDefinitionArgumentParser(), TokenType.CLOSE_PAREN, {
|
||||
list, tokenPosition -> FunctionDefinitionArgumentsNode(list, tokenPosition)
|
||||
})
|
||||
19
src/main/kotlin/dsl/ast/parser/FunctionDefinitionParser.kt
Normal file
19
src/main/kotlin/dsl/ast/parser/FunctionDefinitionParser.kt
Normal file
@@ -0,0 +1,19 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.ast.model.node.FunctionDefinitionNode
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class FunctionDefinitionParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
return allOf(listOf(
|
||||
terminal(TokenType.FUNCTION),
|
||||
assert(SimpleIdentifierParser(), "function/method name"),
|
||||
assert(FunctionDefinitionArgumentsParser(), "function/method arguments list"),
|
||||
assert(BlockParser(), "function/method body")
|
||||
)) {
|
||||
FunctionDefinitionNode(it[1], it[2], it[3], it[0].position)
|
||||
}.parse(input)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user