Scala Parser Combinators< ~~>忽略所有先前的语句

时间:2015-07-16 16:01:19

标签: scala parsing parser-combinators

我使用scala解析器组合器在输入字符串中提取标识符(" a"" ACCOUNT_ID")。当我使用〜>它会忽略字符串的所有前面部分而不是前一个字符串。有人可以帮助我使用Scala Parser Combinators从输入字符串中提取2个标识符吗?感谢您的帮助

class QParser extends JavaTokenParsers with RegexParsers {
def join: Parser [Any] = opt(ident) ~ (opt("(")) ~ ident ~ "." ~> ident <~     opt(",") <~ ident <~ opt(")") 
}

object QueryParser extends QParser {
def main(args: Array[String]){
     println(parseAll(join,"convert(a.ACCOUNT_ID, string)"))
}

}

1 个答案:

答案 0 :(得分:2)

不以:结尾的中缀运营商是左联想的,因此a ~ b ~> c的括号为(a ~ b) ~> c。如果你想要别的东西,你需要自己添加括号。

在这种情况下,您需要opt("(")) ~ ident ~ ("." ~> ident) <~ ...,因此只有"."~>的左操作数。