加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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没有变化.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读