parser-combinators

    1热度

    2回答

    我有几串这样的: name[arg,arg,arg] name[arg,arg] name[arg] name 我想与斯卡拉组合子解析器解析它,这是我设法获得最佳: object TaskDepParser extends JavaTokenParsers { def name: Parser[String] = "[^\\[\\],]+".r def expr: P

    6热度

    1回答

    我正在尝试使用Trifecta解析一个非常简单的函数式语言,并使用类似于Haskell的布局语法。我正在研究Haddock文档和Parsec的经验,因为我无法在Trifecta上找到任何介绍性资料。 我遇到的问题是使用布局的东西,因为甚至没有Haddock文档帮助很大。 考虑下面的代码: import Text.Trifecta import Text.Trifecta.Parser.Token

    5热度

    1回答

    是否可以反转与Scala语法分析器组合器的匹配?我试图用一系列关键字开头的解析器匹配而不是。我可以用恼人的零宽度负向预测正则表达式(例如"(?!h1|h2).*")来做到这一点,但我宁愿使用Scala解析器来做到这一点。我已经能够拿出最好的是这样的: def keyword = "h1." | "h2." def alwaysfails = "(?=a)b".r def linenotstar

    13热度

    1回答

    我写了一个解析器如下: class LogParser extends JavaTokenParsers { def invertedIndex: Parser[Array[Array[(Int, Int)]]] = { num ~> num ~> num ~> rep(postingsList) ^^ { _.toArray } }

    2热度

    1回答

    我试图写在斯卡拉一个简单的解析器,但是当我添加重复令牌斯卡拉似乎陷入无限循环...... object RewriteRuleParsers extends RegexParsers { private def space = regex(new Regex("[ \\n]+")) private def number = regex(new Regex("[0-9]+"))

    1热度

    1回答

    我想在Scala中编写一个解析器,逐渐建立一个具体的类型层次结构。我开始于: private def word = regex(new Regex("[a-zA-Z][a-zA-Z0-9-]*")) private def quicktoken: Parser[Quicktoken] = "/" ~> word <~ "/" <~ (space?) ^^ { new Quicktoken(_)

    1热度

    2回答

    我在使用一种特质时从另一个特性中的方法返回的解析器遇到问题。编译器抱怨类型不匹配,在我看来,问题是由于路径依赖类。我不知道如何得到我想要的。 trait Outerparser extends RegexParsers { def inner: Innerparser def quoted[T](something: Parser[T]) = "\"" ~> somethi

    3热度

    2回答

    我刚学习Scala分析器组合器库。我已经尝试了一个工作分析器,它使用抽象语法树来分析一些算术表达式。 因此,当我打电话 phrase(expr)(tokens) 和我的解析器解析所有的输入,然后给了我一个评价。但是我怎么能一步一步评估? 说 3 + 4 * 7 它打印 3 + 28 然后 分开的行。 我已经浏览了apis,但文档没有太大的帮助... 感谢您的帮助。

    1热度

    2回答

    我只是想解析以下字符串直到END令牌则忽略其他的: val input = """ 0) blah1 blah2 blah3 1) blah4 blah5 END blah6 """ 使用 object Pars extends RegexParsers { def strings: Parser[List[String]] = rep(str) <~ end

    5热度

    1回答

    用Scala解析器组合器(有效)解析C样式多行注释(即/* ... */)的最佳方式是什么? 在我参与的一个项目中,我们解析了一个C语言的编程语言,并且想要支持多行注释。我们使用的StandardTokenParsers一个子类,其中已经处理了这些意见(通过StdLexical,但该类只适用于相当短的多行注释,并运行了,否则堆栈空间。 我们也试图提供我们自己的定义空白,使事情变得更加高效,我们使用