Scala Parboiled 2讨论了一些规则
发布时间:2020-12-16 18:28:25 所属栏目:安全 来源:网络整理
导读:我想创建一些帮助规则,这些规则采用一个规则并为其添加一些功能.例如,强制要求引用字符串文字,或者将令牌位置跟踪添加到令牌规则/ ADT. 我尝试了以下语法(以及相当多的排列). def quoted[T](rl: Rule1[T]) = rule { '"' ~ rl ~ '"' } 它汇编得很好,但一旦我
我想创建一些帮助规则,这些规则采用一个规则并为其添加一些功能.例如,强制要求引用字符串文字,或者将令牌位置跟踪添加到令牌规则/ ADT.
我尝试了以下语法(以及相当多的排列). def quoted[T](rl: Rule1[T]) = rule { '"' ~ rl ~ '"' } 它汇编得很好,但一旦我连线 – 例如, def NodeObjPathEntry: Rule1[CNodeObjPathEntry] = rule { WhiteSpace ~ quoted(IdentifierStringUnwrapped) ~ ':' ~ (NodeObjArray | NodeObjObj) ~> CNodeObjPathEntry } 使用子规则: def IdentifierStringUnwrapped: Rule1[String] = rule { clearSB() ~ IdentifierChars ~ push(sb.toString) } def IdentifierChars = rule { Alpha ~ appendSB() ~ zeroOrMore(AlphaNum ~ appendSB()) } 我得到非法规则调用:引用[this.String](this.IdentifierStringUnwrapped) 我可以提交另一种方法:混合原始令牌解析器,然后创建我需要的变体.但我真的想知道发生了什么. 解决方法
这似乎是
Meta-rules中描述的问题.所描述的解决方案看起来像
val IdentifierStringUnwrapped: () => Rule1[String] = () => rule { ... } // same for other rules you want to apply quoted to def quoted[T](rl: () => Rule1[T]) = rule { '"' ~ rl() ~ '"' } NodeObjPathEntry没有变化. 不幸的是,这对我的解析器不起作用,所以我可能会误解一些东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |