Я пытаюсь выяснить, как прекратить повторение слов с использованием ключевого слова. Пример:Комбинировщик синтаксического анализатора: как прервать повторение по ключевому слову
class CAQueryLanguage extends JavaTokenParsers {
def expression = ("START" ~ words ~ "END") ^^ { x =>
println("expression: " + x);
x
}
def words = rep(word) ^^ { x =>
println("words: " + x)
x
}
def word = """\w+""".r
}
Когда я исполняю
val caql = new CAQueryLanguage
caql.parseAll(caql.expression, "START one two END")
Он печатает words: List(one, two, END)
, указывая на words
анализатор потребляющий END
ключевое слово в моем входе, в результате чего выражение парсер не в состоянии соответствовать. Я бы хотел, чтобы END
не соответствовал words
, что позволит expression
успешно разобрать.
JavaTokenParsers не различают идентификаторы и ключевые слова. Я думаю, ответ от agilefall - это то, что вам нужно. –