gpt4 book ai didi

Scala Parboiled 2 制定了一些规则

转载 作者:行者123 更新时间:2023-12-03 17:49:12 24 4
gpt4 key购买 nike

我想创建一些辅助规则,这些规则采用一个规则并为其添加一些功能。例如,强制需要引用字符串文字,或将标记位置跟踪添加到标记规则/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())
}

我收到 Illegal rule call: quoted[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没有变化.

不幸的是,这对我的解析器不起作用,所以我可能误解了一些东西。

关于Scala Parboiled 2 制定了一些规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com