Domanda

Ho visto due approcci alla costruzione di parser in Scala.

Il primo è quello di estende dal RegexParsers e definire i modelli di won lessicali. Il problema che vedo con questo è che io non capisco come si tratta di ambiguità di parole chiave. Per esempio, se la mia parola chiave corrisponde lo stesso modello idents, quindi elabora le parole chiave come idents.

Per contrastare questo, ho visto i messaggi come questo che mostrano come utilizzare i StandardTokenParsers per specificare le parole chiave. Ma poi, non capisco come specificare i modelli regexp! Sì, StandardTokenParsers è dotato di "ident", ma non arriva con gli altri ho bisogno (complessi a virgola mobile numero rappresentazioni, specifica stringa modelli letterali e le regole per la fuga, ecc).

Come si ottiene sia la possibilità di specificare le parole chiave e la possibilità di specificare modelli token con le espressioni regolari?

È stato utile?

Soluzione

ho scritto parser solo RegexParsers di derivazione, ma quello che faccio è qualcosa di simile:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top