Migrate base statement parser
This commit is contained in:
@@ -2,5 +2,5 @@ import interpreter.Interpreter
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val interpreter = Interpreter()
|
||||
interpreter.run("2 * (2 + 2)")
|
||||
interpreter.run("(2 + 2) * 2 ** 2;")
|
||||
}
|
||||
22
src/main/kotlin/dsl/ast/parser/StatementParser.kt
Normal file
22
src/main/kotlin/dsl/ast/parser/StatementParser.kt
Normal file
@@ -0,0 +1,22 @@
|
||||
package dsl.ast.parser
|
||||
|
||||
import dsl.ast.model.entity.ParserOutput
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
|
||||
class StatementParser : Parser() {
|
||||
override fun tryToParse(input: TokenList): ParserOutput {
|
||||
return allOf(
|
||||
listOf(
|
||||
oneOf(
|
||||
listOf(
|
||||
ExpressionParser()
|
||||
)
|
||||
),
|
||||
optional(terminal(TokenType.SEMICOLON))
|
||||
)
|
||||
) {
|
||||
it[0]
|
||||
}.parse(input)
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
package interpreter
|
||||
|
||||
import dsl.ast.model.node.Node
|
||||
import dsl.ast.parser.Parser
|
||||
import dsl.ast.parser.StatementParser
|
||||
import dsl.token.tokenizer.DefaultTokenizer
|
||||
import java.io.File
|
||||
|
||||
@@ -8,6 +11,11 @@ class Interpreter {
|
||||
val tokenizer = DefaultTokenizer()
|
||||
val lines = code.split("\n")
|
||||
val tokens = tokenizer.tokenize(lines)
|
||||
|
||||
val ast = Parser.repeat(StatementParser()) { nodes, pos -> object : Node(nodes, pos) {} }.parse(tokens)
|
||||
|
||||
ast.node.pretty()
|
||||
println(tokens)
|
||||
}
|
||||
|
||||
fun run(file: File) {
|
||||
|
||||
Reference in New Issue
Block a user