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 { return done(NIL) } override fun parseListTailRecursive(start: Cons, end: Cons, getNextToken: () -> Token): TailCall { return done(start) } class StartsWithRightParenthesisException(position: FilePosition) : LineColumnException(position) { override val messagePrefix: String get() = "expression begins with ')'" } }