【发布时间】:2016-03-30 21:58:51
【问题描述】:
我有以下简单语法
primary ::= name | literal
factor ::= primary| "not" primary
我try to parse with the help of scala combinators
import scala.util.parsing.combinator._
object ExprWithReservedWords extends App with JavaTokenParsers {
def test(title: String, primary: Parser[_]) {
println(title + " " + parseAll(primary | "not" ~ primary, "not 1 "))
}
test("wholeNumber", wholeNumber) // parsed: (not~1)
test("wholeNumber | ident", wholeNumber | ident) // failure: string matching regex `\z' expected but `1' found
}
如果主数据库中只允许数字,wholeNumber 那么一切都很好。但是,如果允许使用标识符,primary = wholeNumber | ident 则解析失败,输入“not 1”,这应该是一个单因素术语。显然,这是因为解析器决定“not”是一个标识符,而不是一个主要的关键字前缀。你如何解决这些冲突?
【问题讨论】:
标签: parsing keyword identifier parser-combinators reserved-words