【发布时间】:2017-02-01 03:21:22
【问题描述】:
我正在尝试在 Scala 中为带有令牌的 SML 编写解析器。它几乎按照我想要的方式工作,除了当前解析的事实
让 fun f x = r 和 fun g y in r 结束;
而不是
让 fun f x = r and 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.");
}
}
【问题讨论】: