parser-combinators

    3热度

    1回答

    我一直试图让我的头在斯卡拉的分析器组合器。看起来它们非常强大,但我似乎发现的唯一教程示例是使用数学表达式和几乎没有适当的真实世界解析示例,需要解析DSL并将其映射到不同的实体等。 为了在这个例子中,可以说我有这个BNF,我有这个实体名为Model,它由一个字符串组成,如下所示:[model [name <name> ]]。这是一个更大的BNF的简单例子,现实中有更多的实体。 所以我定义我自己的类M

    0热度

    1回答

    它是我第一次使用scala的解析器组合器。 我有这种情况,我有一个'类型'的列表,他们可以扩展其他类型,或不。 如果他们这样做,我只是在类型和它的父类型之间创建一个映射。 如果不是,我只是将类型映射到“对象”。 (类型只是字符串名称) 他们是这样写的: type1 type2 type3 - parentType 或 type0a type0b 在这种情况下,他们将隐含地- object

    1热度

    1回答

    我创建了一个Scala的解析器组合基于我到前面的问题How to parse a string with filter citeria in scala and use it to filter objects 我想从加计算器解析器组合的回答来过滤数据记录这个问题的答案 Operator Precedence with Scala Parser Combinators 到基于第一个问题创建的解析器

    0热度

    1回答

    比方说,我有以下几点: case class Var(s: String) class MyParser extends JavaTokensParser { def variableExpr = "?" ~ identifier ^^ { case "?" ~ id => Var(id) } def identifier = //... } 我想这是接受形式?

    1热度

    1回答

    我正在使用Scala解析器组合器编写DSL,并且具有可读取单个文件并解析它的工作版本。但是,我想将我的输入分成几个文件,其中一些文件是“标准”的,可以与任何顶层文件一起使用。我想是这样的: 进口 “a.dsl” 进口 “b.dsl” 文件 //休息使用{A,B} 它不是”重要的是读取文件的顺序或者在被引用之前必须“定义”某些东西,所以首先解析顶层文件然后将所有导入的关闭解析为单个模型就足够了。然后

    2热度

    1回答

    我在Ruby中使用regexp来匹配终端来编写递归下降解析器。终端实际上​​是regexps,并且匹配字符串中的当前位置。 问题是终端正则表达式可以包含任何东西,包括匹配换行符的正则表达式。例如,匹配括号/\([^\)]*\)/之间任何内容的终端将消耗空白,包括我需要计算的换行符。我拿出了几种解决方案,但它们都有缺点,我特别不喜欢: 每当终端匹配,算上\n所有出现在比赛中。这实际上意味着每个字符串

    3热度

    1回答

    中的内容主要建设虽然成分复杂的解析器,但我想知道是否有通过调整库的组成解析器没有定义解析器什么好办法完全复制了原图书馆的逻辑。 例如,这里是在Real world Haskell import Text.ParserCombinators.Parsec csvFile = endBy line eol line = sepBy cell (char ',') cell = many (no

    5热度

    1回答

    有人可以解释如何以及何时使用三重脱字符^^^(与双重脱字符^^ )在设计scala分析器组合器时?还有/何时/如何使用parser.into()方法(>>)。

    1热度

    1回答

    我刚刚开始在Scala中使用解析器组合器,但在解析器中解析句子,比如“我喜欢Scala”。 (单词以空格或句点结尾(.))。 我开始用下面的实现: package example import scala.util.parsing.combinator._ object Example extends RegexParsers { override def skipWhitesp

    0热度

    1回答

    在约RegexParsers的Scaladoc,有下面的代码: object Calculator extends RegexParsers { def number: Parser[Double] = """\d+(\.\d*)?""".r ^^ { _.toDouble } def factor: Parser[Double] = number | "(" ~> expr