我的CFG产品是:
let: "let" "var"? idn "=" exp
因此它允许像let a = 3
或let var t = 2
这样的语法
我还有2个案例类,一个带有var
,另一个不带有var
case class Let(name : Idn, exp : Expression)
case class LetVar(name : Idn, exp : Expression)
因此,如果var
存在,则应使用适当的案例类进行解析。
我尝试过:
lazy val let : PackratParser[Let] =
("let" ~> idn) ~ ("=" ~> exp) ^^ {case x ~ t => Let(x, t)}
("let" ~> "var" ~> idn ) ~ ("=" ~> exp) ^^ {case x ~ t => LetVar(x, t)}
除了语法只是let
而不是var
以外。
但是它没有通过我进行过的var
测试,说它期望idn
,但是却把var
放在var
的位置。我看不出到底出了什么问题,因为这对我来说很有意义。
是否已解决此问题,还是为lazy val...
创建新的var
的唯一选择?因为初步测试表明创建新的lazy val..
是可行的,但我只是好奇