我使用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)"))
}
}
答案 0 :(得分:2)
不以:
结尾的中缀运营商是左联想的,因此a ~ b ~> c
的括号为(a ~ b) ~> c
。如果你想要别的东西,你需要自己添加括号。
在这种情况下,您需要opt("(")) ~ ident ~ ("." ~> ident) <~ ...
,因此只有"."
是~>
的左操作数。