parser-combinators

    0热度

    1回答

    我在分隔符组合器上留有空白。即使关键字是“keywordandthetheoftofthestream”中的前缀,它们也会使用关键字。此外,identifier = rep1("a")消耗a a中的两个字母作为单个aa。这些信息表明我需要做一些处理,并且可以将解析器组合器放在词法分析器的顶部。 我看到有一个特殊的Lexical解析器来达到这个目的。但为什么实际上这个分词器的标记化?有什么意义?为什

    0热度

    1回答

    我通过Artima guide看着解析器组合,它说,我们需要追加失败(MSG)给我们的语法规则,以便为用户 def value: Parser[Any] = obj | stringLit | num | "true" | "false" | failure("illegal start of value") 这打破了我的递归机制的理解错误报告有意义,在这些解析器中使用。一方面,Ar

    2热度

    1回答

    我在写一个cron解析器,但编译器抱怨非法规则组合, 我的解析器出了什么问题? import org.parboiled2._ sealed trait Part case class Fixed(points: Seq[Int]) extends Part case class Range(start: Int, end: Int) extends Part case class Ev

    1热度

    1回答

    我正在尝试使用解析器组合器在Scala中编写一个SemVer(http://semver.org)解析器,以此来熟悉它们。 这是我当前的代码: case class SemVer(major: Int, minor: Int, patch: Int, prerelease: Option[List[String]], metadata: Option[List[String]]) { o

    2热度

    1回答

    我使用Scala的PackratParsers(解析器组合)具有以下形式的左递归语法 lazy val expr: PackratParser[Expr] = ( ... | expr ~ (":" ~ expr).+ ^^ { case expr ~ rest => (expr /: rest)(combineBinary) } | ... )

    4热度

    1回答

    我正在寻找使用Scala的Parser Combinators来解析字符串(没有换行符,人为的例子)。 该字符串由许多不同的部分组成,我想单独提取并填充案例类。 case class MyRecord(foo: String, bar: String, baz: String, bam: String, bat: String) object MyParser extends scala.ut

    3热度

    3回答

    我想解析表达式(<,< =,> =,>)。只有< =工作得很好。有人可以帮助解决这个问题。 代码: object MyTestParser extends RegexParsers { override def skipWhitespace = true private val expression: Parser[String] = """[a-zA-Z0-9\.]+"""

    0热度

    2回答

    我想在scala中编写一个简单的解析器,但是当我添加重复的令牌时Scala似乎陷入了无限循环。 我有2个下面的解析方法。一个使用rep()。非重复版本按预期工作(不是我想要的),但使用rep()版本会导致无限循环。 编辑: 这是一个学习的例子,我厌倦了执行'='被空白包围。 如果它是有帮助的,这是我的实际测试文件: a = 1 b = 2 c = 1 2 3 我能够解析:(与parse1法

    0热度

    1回答

    我有以下解析器: import scala.util.parsing.combinator.RegexParsers class SimpleParser extends RegexParsers { override val skipWhitespace = false private val eol = sys.props("line.separator")

    0热度

    1回答

    我想这 import scala.util.parsing.combinator._ def name = ident ^^ {case ident => if (ident.contains("a")) ident.toUpperCase else ident println(parseAll(name, "aa")) // parsed: AA println(parseAll(nam