如何为CFG中具有不同大小写类别的可选单词创建解析器

时间:2018-10-04 05:26:52

标签: scala parsing

我的CFG产品是:

let: "let" "var"? idn "=" exp

因此它允许像let a = 3let 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..是可行的,但我只是好奇

0 个答案:

没有答案