2
我试图写在斯卡拉一个简单的解析器,但是当我添加重复令牌斯卡拉似乎陷入无限循环......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)
}
和代码叫它
val parseResult = RewriteRuleParsers.parseMatchToken("[{tag=hello}]")
任何意见gratefull收到
请注意,例如'regex(new Regex(“[0-9] +”))''可以写成''[0-9] +“。r'(或者只是'”\\ d +“。r”')。 – 2012-07-27 13:44:27