Scala解析SML的相互递归函数
发布时间:2020-12-16 19:24:33 所属栏目:安全 来源:网络整理
导读:我正在尝试使用令牌在 Scala中为SML编写解析器.它几乎按照我希望它的工作方式工作,除了这个当前解析的事实 让乐趣f x = r并且乐趣在r end; 代替 让乐趣f x = r和g y在r end; 如何更改我的代码,以便它识别出第二个函数不需要FunToken? def parseDef:Def = {
我正在尝试使用令牌在
Scala中为SML编写解析器.它几乎按照我希望它的工作方式工作,除了这个当前解析的事实
让乐趣f x = r并且乐趣在r end; 代替 让乐趣f x = r和g y在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,parseAnd) } case _ => error("Expected VAL or FUN."); } } 解决方法
只需实现正确的语法.代替
def ::= "val" id "=" exp | fun fun ::= "fun" id id "=" exp ["and" fun] SML的语法实际上是 def ::= "val" id "=" exp | "fun" fun fun ::= id id "=" exp ["and" fun] 顺便说一下,我认为解析好玩还有其他问题. AFAICS,你没有在有趣的情况下解析任何“=”.而且,在“和”之后,你甚至不解析任何标识符,只是函数体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容