diff --git a/src/main/kotlin/dsl/ast/model/node/ImportNode.kt b/src/main/kotlin/dsl/ast/model/node/ImportNode.kt new file mode 100644 index 0000000..c39ea2c --- /dev/null +++ b/src/main/kotlin/dsl/ast/model/node/ImportNode.kt @@ -0,0 +1,12 @@ +package dsl.ast.model.node + +import dsl.token.model.entity.TokenPosition + +class ImportNode(path: Node, position: TokenPosition) : Node(1, position) { + val path: Node + get() = children[0] + + init { + children[0] = path + } +} \ No newline at end of file diff --git a/src/main/kotlin/dsl/ast/parser/ImportParser.kt b/src/main/kotlin/dsl/ast/parser/ImportParser.kt new file mode 100644 index 0000000..dab6b93 --- /dev/null +++ b/src/main/kotlin/dsl/ast/parser/ImportParser.kt @@ -0,0 +1,23 @@ +package dsl.ast.parser + +import dsl.ast.model.entity.ParserOutput +import dsl.ast.model.node.ImportNode +import dsl.token.model.entity.TokenList +import dsl.token.model.enumeration.TokenType + +class ImportParser : Parser() { + override fun tryToParse(input: TokenList): ParserOutput { + val pathParser = oneOf( + UnitParser(), + SimpleIdentifierParser(), + StringLiteralParser() + ) + + return allOf( + terminal(TokenType.IMPORT), + pathParser + ) { + ImportNode(it[1], it[0].position) + }.parse(input) + } +} \ No newline at end of file