J'essaie de comprendre comment terminer une répétition de mots en utilisant un mot-clé. Un exemple:combinateur analyseur: comment terminer la répétition sur mot-clé
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
}
Lorsque j'exécute
val caql = new CAQueryLanguage
caql.parseAll(caql.expression, "START one two END")
Il imprime words: List(one, two, END)
, ce qui indique que l'analyseur words
a consommé le mot-clé END
dans mon entrée, laissant l'analyseur d'expression incapable de faire correspondre. Je voudrais END
pour ne pas correspondre par words
, ce qui permettra expression
analyser avec succès.
JavaTokenParsers ne distingue pas entre les identifiants et mots-clés. Je pense que la réponse d'agilefall est ce dont vous avez besoin. –