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

scala – Parboiled2 Parser示例

发布时间:2020-12-16 09:07:43 所属栏目:安全 来源:网络整理
导读:我试图从 parboiled2开始尝试这个例子: scala class MyParser(val input: org.parboiled2.ParserInput) extends org.parboiled2.Parser { def f = rule { capture("foo" ~ push(42)) } }defined class MyParser 然后,我创建一个输入“foo”的新MyParser. sc
我试图从 parboiled2开始尝试这个例子:

scala> class MyParser(val input: org.parboiled2.ParserInput) 
            extends org.parboiled2.Parser { 
                def f = rule { capture("foo" ~ push(42)) 
                } 
        }
defined class MyParser

然后,我创建一个输入“foo”的新MyParser.

scala> new MyParser("foo").f
res11: org.parboiled2.Rule[shapeless.HNil,shapeless.::
            [Int,shapeless.::[String,shapeless.HNil]]] = null

但返回值为null.

如何从REPL运行这个简单的f规则?

解决方法

Parboiled 2的规则是一个宏,使用规则定义的方法不应在其他规则的上下文之外引用或调用run().所以如果你有以下内容:

import org.parboiled2._

class MyParser(val input: ParserInput) extends Parser {
  def f = rule { capture("foo" ~ push(42)) } 
}

您可以像这样使用它(为清晰起见清理了类型):

scala>  new MyParser("foo").f.run()
res0: scala.util.Try[Int :: String :: HNil] = Success(42 :: foo :: HNil)

如果您不想尝试,可以使用其他delivery schemes之一.

(编辑:李大同)

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

    推荐文章
      热点阅读