parser-combinators

    1热度

    4回答

    我想编写一个解析器来生成一些数据结构并通过运行一个谓词来验证它的一致性。如果谓词返回false,解析器应该返回一个自定义的Error对象(而不是Failure,因为这可以通过^?来实现)。 我正在寻找一些解析器上的操作符,可以实现这一点。 例如,假设我想分析一个整数列表并检查它们是否不同。我想有这样的事情: import util.parsing.combinator.RegexParsers

    1热度

    1回答

    有人可以帮助我理解以下行为: parseAll (parseIf, "If bla blablaa")应导致is expected。相反,我总是得到string matching regex 'is\b' expected but 'b' found。 我想它与空格有关,因为" If bla is blablaa"(注意开始处的空白)会导致相同的行为。我用StandardTokenParsers试

    3热度

    2回答

    斯卡拉2.8.1 我一直在使用的解析器/组合子的QA来编写验收测试,实现了一个非常简单的外部DSL。 最近我加入循环的能力在一组表达式,像这样 sealed trait Expr ... //insert other case classes extending 'Expr' here ... case class Repetition(times: Int, expressions:

    2热度

    1回答

    我对Scala分析器组合器有些困惑。 我使用阅读器的定制实现直接读取的标记列表: private class Token_Reader(tokens: List[Token], val pos: Token_Pos) extends Reader { def first = if(atEnd) null else tokens.head def rest = if(atEnd

    0热度

    3回答

    我想实现一个简单的Wiki类标记分析器作为使用Scala分析器组合器的练习。 我想解决这个问题,所以这里是我想在第一个版本中实现的:一个简单的内联文字标记。 例如,如果输入字符串为: This is a sytax test ``code here`` . Hello ``World`` 输出字符串应该是: This is a sytax test <code>code here</code>

    12热度

    2回答

    我熟悉fpar​​sec的一些基础知识,但它似乎适用于文本文件或流。 是否有任何其他F#库可以有效地解析二进制文件?或者可以轻松修改fparsec以便与二进制流高效工作?

    2热度

    2回答

    我必须处理很多不同的文件格式。至少50个,也许超过100个。 我以前玩过Antlr。不过,我不知道,ANTLR的将是适合这个项目有几个原因: 很难结合和重用语法和/或文法件 ANTLR的做代码生成 - 制作对现有解析器的更改需要返回到Antlr,进行更改,重新生成代码,将代码集成到代码库中,然后运行单元测试,执行树构建/处理需要处理内部的其他语言Antlr - 未来开发者潜在的问题 基本上,我喜欢

    1热度

    2回答

    我想创建一个解析器,用于操作顺序的困难表达式。我有一些例子,但它工作非常缓慢,并抛出异常OutOfMemoryError。我该如何改进它? def expr: Parser[Expression] = term5 def term5: Parser[Expression] = (term4 ~ "OR" ~ term4) ^^ { case lhs~o~rhs => BinaryOp(

    21热度

    3回答

    我是相当新的Scala和一边念叨解析器组合(The Magic Behind Parser Combinators,Domain-Specific Languages in Scala)我整个的方法定义出来是这样的: def classPrefix = "class" ~ ID ~ "(" ~ formals ~ ")" 我一直在阅读throught的scala.util.parsing.Pa

    0热度

    1回答

    我刚开始使用外部DSL,但遇到了问题。我写了一个非常简单的测试,我用斯卡拉2.9.0-1和scalatest 1.6.1: class DSLTest extends FlatSpec with ShouldMatchers { object DSL extends JavaTokenParsers { def test = stringLiteral def