transcendental-lisp/src/main/kotlin/token/RightParenthesis.kt

30 lines
900 B
Kotlin

package token
import error.LineColumnException
import file.FilePosition
import recursion.TailCall
import recursion.TailCalls.done
import sexpression.Cons
import sexpression.Nil.NIL
import sexpression.SExpression
class RightParenthesis(text: String, position: FilePosition) : Token(text, position) {
override fun parseSExpression(getNextToken: () -> Token): SExpression {
throw StartsWithRightParenthesisException(position)
}
override fun parseListTail(getNextToken: () -> Token): TailCall<Cons> {
return done(NIL)
}
override fun parseListTailRecursive(start: Cons, end: Cons, getNextToken: () -> Token): TailCall<Cons> {
return done(start)
}
class StartsWithRightParenthesisException(position: FilePosition) : LineColumnException(position) {
override val messagePrefix: String
get() = "expression begins with ')'"
}
}