30 lines
900 B
Kotlin
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 ')'"
|
|
}
|
|
}
|