首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parboiled2分析器示例

Parboiled2分析器示例
EN

Stack Overflow用户
提问于 2015-03-24 01:59:31
回答 1查看 1K关注 0票数 3

我正在尝试从parboiled2尝试这个例子

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

然后,我使用MyParser的输入创建了一个新的"foo"

代码语言:javascript
复制
scala> new MyParser("foo").f
res11: org.parboiled2.Rule[shapeless.HNil,shapeless.::
            [Int,shapeless.::[String,shapeless.HNil]]] = null

但是返回值是null

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 02:13:48

rule是一个宏,使用rule定义的方法不打算在其他规则的上下文或对run()的调用之外引用。因此,如果您有以下内容:

代码语言:javascript
复制
import org.parboiled2._

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

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

代码语言:javascript
复制
scala>  new MyParser("foo").f.run()
res0: scala.util.Try[Int :: String :: HNil] = Success(42 :: foo :: HNil)

如果您不想要一个Try,您可以使用另一个交付计划

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29223741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档