Question

Je l'ai vu deux approches pour la construction parseurs Scala.

La première est de s'étend de RegexParsers et définir vos won modèles lexicaux. La question que je vois ce que je ne comprends pas vraiment comment il oeuvre dans ces ambiguïtés mot-clé. Par exemple, si mon mot clé correspond le même schéma que idents, il traite les mots-clés comme idents.

Pour contrer cela, je l'ai vu les messages comme celui-ci qui montrent comment utiliser les StandardTokenParsers spécifier des mots clés. Mais, je ne comprends pas comment spécifier les motifs de regexp! Oui, StandardTokenParsers est livré avec « Ident », mais il ne vient pas avec les autres que j'ai besoin (représentations de nombres complexes à virgule flottante, des modèles et des règles littérales de chaîne spécifique pour échapper, etc).

Comment obtenez-vous à la fois la possibilité de spécifier des mots-clés et la possibilité de spécifier des motifs symboliques avec des expressions régulières?

Était-ce utile?

La solution

J'ai écrit que parseurs dérivé RegexParsers, mais ce que je fais quelque chose comme ceci:

val name: Parser[String] = "[A-Z_a-z][A-Z_a-z0-9]*".r

val kwIf: Parser[String]    = "if\\b".r
val kwFor: Parser[String]   = "for\\b".r
val kwWhile: Parser[String] = "while\\b".r

val reserved: Parser[String] = ( kwIf | kwFor | kwWhile )

val identifier: Parser[String] = not(reserved) ~> name
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top