Scala解析器陷入无限循环

Scala解析器陷入无限循环,scala,parser-combinators,Scala,Parser Combinators,我试图用scala编写一个简单的解析器,但当我添加一个重复的标记时,scala似乎陷入了一个无限循环中 object RewriteRuleParsers extends RegexParsers { private def space = regex(new Regex("[ \\n]+")) private def number = regex(new Regex("[0-9]+")) private def equals = (space?)~"="~(space?) p

我试图用scala编写一个简单的解析器,但当我添加一个重复的标记时,scala似乎陷入了一个无限循环中

object RewriteRuleParsers extends RegexParsers {
  private def space = regex(new Regex("[ \\n]+"))
  private def number = regex(new Regex("[0-9]+")) 
  private def equals = (space?)~"="~(space?)
  private def word   = regex(new Regex("[a-zA-Z][a-zA-Z0-9-]*")) 
  private def string = regex(new Regex("[0-9]+")) >> { len => ":" ~> regex(new Regex(".{" + len + "}")) }  

  private def matchTokenPartContent: Parser[Any] = (space?)~word~equals~word<~ space?  
  private def matchTokenPart: Parser[Any] = ((space?) ~> "{" ~> matchTokenPartContent <~ "}"<~ space?)  
  private def matchTokenParts = (matchTokenPart *)  
  private def matchToken: Parser[Any] = ("[" ~> matchTokenParts ~ "]")

  def parseMatchToken(str: String): ParseResult[Any] = parse(matchToken, str)
}

收到的任何建议

问题在于
的优先级。以以下为例:

object simpleParser extends RegexParsers {
  val a = literal("a")
  val b = literal("b")
  def apply(s: String) = this.parseAll(a <~ b?, s)
}
objectsimpleparser扩展regexparser{
val a=文字(“a”)
val b=文字(“b”)

def apply(s:String)=this.parseAll(注意,例如,
regex(new regex(“[0-9]+”)
可以写
“[0-9]+”).r
(或者只写
”\\d+”.r“
)。事实上,post-fixed操作符现在在2.10中受到限制。这可以更清晰、更容易地写为
a
object simpleParser extends RegexParsers {
  val a = literal("a")
  val b = literal("b")
  def apply(s: String) = this.parseAll(a <~ b?, s)
}