我正在嘗試在Scala中爲帶標記的SML編寫解析器。它幾乎按照我希望它工作的方式工作,除了目前解析的這一事實:Scala爲SML解析相互遞歸函數
let fun f x = r and fun g y in r end;的
代替
讓r中端樂趣˚FX = R和Gÿ;
如何更改我的代碼,以便它可以識別它不需要第二個函數的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.");
}
}