Я пытаюсь написать парсер в Scala для SML с токенами. Он работает почти так, как я хочу, чтобы он работал, за исключением того факта, что в данный момент он обрабатываетScala разбор взаимно-рекурсивных функций для SML
Позволяет получать удовольствие f x = r и fun g y in r end;
вместо
пусть прикольных ф х = г и г у в г конце;
Как мне изменить код, чтобы он распознал, что для второй функции не нужен FunToken?
def parseDef:Def = {
currentToken match {
case ValToken => {
eat(ValToken);
val nme:String = currentToken match {
case IdToken(x) => {advance; x}
case _ => error("Expected a name after VAL.")
}
eat(EqualToken);
VAL(nme,parseExp)
}
case FunToken => {
eat(FunToken);
val fnme:String = currentToken match {
case IdToken(x) => {advance; x}
case _ => error("Expected a name after VAL.")
}
val xnme:String = currentToken match {
case IdToken(x) => {advance; x}
case _ => error("Expected a name after VAL.")
}
def parseAnd:Def = currentToken match {
case AndToken => {eat(AndToken); FUN(fnme,xnme,parseExp,parseAnd)}
case _ => NOFUN
}
FUN(fnme,xnme,parseExp,parseAnd)
}
case _ => error("Expected VAL or FUN.");
}
}