トークンでSML用のScalaにパーサを書き込もうとしています。これは現在、私はそれが現在解析しているという事実を除いて、動作するようにほとんど動作します。SMLの相互再帰関数を解析するスカラ
r =
の代わりに
r endでfun fx = rとg yを楽しんでください。
2番目の機能に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.");
}
}