在Scala的解析器组合器(特别是JavaTokensParser)中,有一个与类Java字符串相匹配的定义stringLiteral。有办法将stringLiteral转换为String吗?例如,如果我解析"Run \" run \\ run",我希望将输入的字符串文字转换为Run " run \ run。
另外,stringLiterals是否有一个也支持"""的定义?
我正在开发一个可以在Scala中解析命令的应用程序。命令的示例如下:
todo get milk for friday
因此,我们的计划是让一个相当智能的解析器将行分开,并识别命令部分以及字符串中存在对时间的引用的事实。
一般来说,我需要在Scala中创建一个记号赋予器。所以我想知道我的选择是什么。我熟悉正则表达式,但我还计划做一个类似SQL的搜索功能:
search todo for today with tags shopping
我觉得正则表达式在执行命令时会有很多不同之处。这让我想到了实现某种语法。
在Scala中,在这方面有哪些选择?
看起来scala的解析器组合子没有回溯。我有一个语法(见下图)不能正确解析下面的"stmt“:
copy in to out .
这应该很容易通过回溯来解析:
stmt: (to out(copy in))
还是我错过了什么?
解析器:
type ExprP = Parser[Expr]
type ValueP = Parser[ValExpr]
type CallP = Parser[Call]
type ArgsP = Parser[Seq[Expr]]
val ident = "[a-zA-Z\\+\\-\\*/%><\\\\\\=]+".r
我正在研究如何使用Scala的来解析一个字符串(没有换行符,有人设计的例子)。
该字符串由许多不同的部分组成,我想分别提取这些部分并填充一个case类。
case class MyRecord(foo: String, bar: String, baz: String, bam: String, bat: String)
object MyParser extends scala.util.parsing.combinator.RegexParsers {
val foo: Parser[String] = "foo"
val bar: Parser[String]
我有个简单的问题:
我希望有一个解析文本的结果的值映射:
example.txt
Anna
James
Katy
因此,它应该是一幅大地图--就像这样:
user_1 : Anna
user_2 : James
user_3 : Katy
我希望用case类将它与解析逻辑分开保存:
case class UserMap(userMap: Map[String, String])
所以,我开始解析它,我需要一些熟悉的东西:
(pseudo-scala)
def parseTxt: Parser[UserMap] = ".*".r ^^ {
case res =>
我正在使用解析器组合器将准结构化日志文件数据转换为JSON。我希望在执行过程中使用位置信息来丰富结果,以便可以在原始输入文件中定位输出中的数据元素。当我在和中看到对positioned方法的描述时,我认为解决方案就在我面前,但我却遇到了这样的异常:
Error:(133, 24) inferred type arguments [String]
do not conform to method positioned's type
parameter bounds [T <: scala.util.parsing.input.Positional]
从中提炼出来,我希望能够说出
我试图解析两个Int和一些元素的输入,以及end:
import scala.util.parsing.combinator.JavaTokenParsers
class X extends JavaTokenParsers {
lazy val elems = elem("wrong elem", "#WB-" contains _)
lazy val lists = repsep(rep(elems), ",")
lazy val p1 = int ~ int ~ lists
lazy val p2 = int ~ int
在Scala中,我如何转换:
<p>here we have a <a href="http://www.scala-lang.org/api/current/index.html">link</a> example.</p>
至
here we have a \url{http://www.scala-lang.org/api/current/index.html}{link} example.
其中<p></p>映射到"nothing",<a href"_">
我正在使用Scala中的本机解析器组合器库,我想解析输入的某些部分,但不解析其他部分。具体来说,我想放弃我关心的输入之间的所有任意文本。例如,使用此输入:
begin
Text I care about
Text I care about
DONT CARE
Text I don't care about
begin
More text I care about
...
现在我有:
object MyParser extends RegexParsers {
val beginToken: Parser[String] = "begin"
va
我是Scala的初学者,现在学习Scala解析器组合器,编写"MiniLogicParser",这是一个用于命题逻辑公式的迷你解析器。我成功地部分解析了它,但不能转换为case类。我试过了下面的代码。
import java.io._
import scala.util.parsing.combinator._
sealed trait Bool[+A]
case object True extends Bool[Nothing]
case class Var[A](label: A) extends Bool[A]
case class Not[A](child: Bool
我正在创建一个DSL,并使用Scala的解析器组合器库来解析DSL。DSL遵循简单的、类似Ruby的语法。源文件可以包含一系列如下所示的块:
create_model do
at 0,0,0
end
行尾在DSL中很重要,因为它们被有效地用作语句终止符。
我编写了一个Scala解析器,如下所示:
class ML3D extends JavaTokenParsers {
override val whiteSpace = """[ \t]+""".r
def model: Parser[Any] = commandList
de