2014-02-19 21 views
0

比方说,我有以下几点:如何指定scala解析器组合器中存在或不存在空格?

case class Var(s: String) 

class MyParser extends JavaTokensParser { 

    def variableExpr = "?" ~ identifier ^^ { case "?" ~ id => Var(id) } 

    def identifier = //... 

} 

我想这是接受形式?X但不? X(之间有一个空格)的输入。这将如何表达?

谢谢!

回答

2

JavaTokensParser默认情况下允许任何解析器之间有空格。你可以改变这种行为是这样的:

override def skipWhitespace = false 

现在你要手动指定所有空格:

def ws: Parser[Seq[Char]] = rep(' ') 

def variableExpr = ws ~> "?" ~ identifier ^^ { case "?" ~ id => Var(id) } 
+0

谢谢!是否有任何预定义的解析器接受任何空格? – gdiazc

+0

第二个问题:有没有比我应该考虑使用的''JavaTokensParser'更合适的类? – gdiazc

+1

@Gonzalo:'“”“\ s +”“”r' [在scala中使用](https://github.com/scala/scala/blob/v2.10.3/src/library/scala/util/parsing /combinator/RegexParsers.scala#L60)。 – senia

相关问题