Hãy xem xét ví dụ về phân tích cú pháp như thế này:Trình kết hợp phân tích cú pháp: Tính năng repsep có cho phép theo dõi lại không?
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))
}
Nếu tôi cố gắng phân tích đầu vào này (mà không hai dòng chứa loại trừ công trình OK):
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
tôi nhận được lỗi sau:
[5.5] failure: `items:' expected but `e' found
exclude: item1
^
Vấn đề hiển nhiên là dòng này:
def itemsDefinition = (rep1sep(list, eol) ~ repsep(constraints,eol))
Lý do không hoạt động. Nó có liên quan đến việc quay ngược lại không? Tôi phải làm gì để làm cho nó hoạt động?
Nếu có ai đề xuất tiêu đề câu hỏi hay hơn, vui lòng cho tôi biết. Không chắc chắn nếu nó thậm chí có ý nghĩa .. – PrimosK