考虑这样的解析器示例:
object TestParser extends RegexParsers {
override protected val whiteSpace = """[ \t]*""".r
def eol = """(\r?\n)+""".r
def item = "[a-zA-Z][a-zA-Z0-9-]*".r
def list = "items:" ~> rep1sep(item,",")
def constraints = "exclude:" ~> item
def itemsDefinition = (rep1sep(list, eol) ~ repsep(constraints,eol))
}
如果我尝试解析这个输入(没有两行包含排除工作正常):
items: item1, item2, item3, item3, item4
items: item2, item3, item3, item5, item4
items: item4, item5, item6, item10
items: item1, item2, item3
exclude: item1
exclude: item2
我收到以下错误:
[5.5] failure: `items:' expected but `e' found
exclude: item1
^
问题很明显这一行:
def itemsDefinition = (rep1sep(list, eol) ~ repsep(constraints,eol))
不起作用的原因是什么。跟回溯有关系吗?我必须使用哪些替代方法才能使其发挥作用?