2010-12-02 5 views
1

J'ai deux parseurs packrat à scala:Construire une expression rationnelle parseurs packrat à Scala

val symbols : PackratParser[String] = 
    "{" | "}" | ">" 

val keywords : PackratParser[String] = 
    "BOOL" | "INT" 

Je veux construire un analyseur qui peut reconnaître si une instruction est composée d'un ou plusieurs de ces deux parseurs. La façon dont je le fais habituellement est:

val statement : PackratParser[String] = 
    regex("[symbols | keywords]+".r) 

Mais cela ne fonctionnerait pas parce qu'ils pensent que je veux que les véritables « symboles » ou jeton « keywords » ... Quelqu'un peut-il aider?

Répondre

4

Vous ne pouvez pas utiliser une regex de cette façon. Cependant, l'intérêt des combinateurs d'analyseurs est qu'ils peuvent être combinés!

val statement : PackratParser[List[String]] = 
    rep1(symbols | keywords) 
+0

ah ok ... mais comment faire en sorte qu'il puisse y avoir une ou plusieurs de ces deux choses? J'ai regardé autour de moi et je n'ai trouvé aucun site expliquant cela –

+0

La documentation de 'rep1' dit:" Un générateur d'analyseur pour les répétitions non vides rep1 (p) utilise à plusieurs reprises p pour analyser l'entrée jusqu'à ce que p échoue - - p doit réussir au moins une fois (le résultat est une liste des résultats consécutifs de p) "Est-ce que c'est ce que vous voulez? Sinon, donnez quelques exemples et résultats attendus. –

+0

Oui, c'est ce que je voulais! Merci beaucoup! Je n'ai pas vu ça du tout (même dans le livre Scala blanc!) Merci! –

Questions connexes