考慮例如解析器這樣的:我獲得以下錯誤解析器組合器:repsep是否允許回溯?
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
^
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))
}
如果我嘗試解析該輸入(不含兩行包含排除的作品OK)
問題很明顯這條線:
def itemsDefinition = (rep1sep(list, eol) ~ repsep(constraints,eol))
它不起作用的原因是什麼。它跟回溯有什麼關係?我必須做些什麼才能使其發揮作用?
如果有人提出更好的問題標題請讓我知道。不知道它是否有道理.. – PrimosK 2012-02-22 15:24:41