Create InvalidSyntaxException
This commit is contained in:
@@ -8,6 +8,7 @@ import dsl.token.model.entity.Token
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
import error.InvalidSyntaxException
|
||||
|
||||
abstract class Parser {
|
||||
fun parse(input: TokenList): ParserOutput {
|
||||
@@ -177,7 +178,7 @@ abstract class Parser {
|
||||
val output = parser.parse(input)
|
||||
|
||||
if (output.result == ParsingResult.FAILED) {
|
||||
throw RuntimeException("Expected $expected")
|
||||
throw InvalidSyntaxException("Expected $expected, got '${input.current.rawValue}'", input.currentPos())
|
||||
}
|
||||
|
||||
return output
|
||||
|
||||
@@ -2,6 +2,7 @@ package dsl.token.tokenizer
|
||||
|
||||
import dsl.token.model.entity.Token
|
||||
import dsl.token.model.entity.TokenList
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
import dsl.token.model.entity.TokenizerOutput
|
||||
import dsl.token.model.enumeration.TokenType
|
||||
import dsl.token.tokenizer.Tokenizer.Companion.default
|
||||
@@ -9,6 +10,7 @@ import dsl.token.tokenizer.Tokenizer.Companion.keywords
|
||||
import dsl.token.tokenizer.Tokenizer.Companion.mapValue
|
||||
import dsl.token.tokenizer.Tokenizer.Companion.regex
|
||||
import dsl.token.tokenizer.Tokenizer.Companion.separated
|
||||
import error.InvalidSyntaxException
|
||||
|
||||
class DefaultTokenizer : Tokenizer {
|
||||
private val tokenizers = listOf(
|
||||
@@ -89,7 +91,7 @@ class DefaultTokenizer : Tokenizer {
|
||||
val output = tokenize(line, current, index)
|
||||
|
||||
if (!output.consumed()) {
|
||||
throw RuntimeException("Unknown symbol ${line[current]}")
|
||||
throw InvalidSyntaxException("Unknown symbol ${line[current]}", TokenPosition(index, current, -1))
|
||||
}
|
||||
|
||||
current += output.consumedChars
|
||||
|
||||
8
src/main/kotlin/error/InvalidSyntaxException.kt
Normal file
8
src/main/kotlin/error/InvalidSyntaxException.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package error
|
||||
|
||||
import dsl.token.model.entity.TokenPosition
|
||||
|
||||
class InvalidSyntaxException(message: String?, val position: TokenPosition?) : Exception(message) {
|
||||
override val message: String?
|
||||
get() = super.message + if(position != null) " $position" else ""
|
||||
}
|
||||
Reference in New Issue
Block a user