Pregunta

he visto dos enfoques para la construcción de analizadores en Scala.

es el primero que se extiende desde RegexParsers y definir sus patrones léxicos Won. El problema que veo con esto es que yo no entiendo muy bien la forma en que se ocupa de las ambigüedades de palabras clave. Por ejemplo, si mi palabra clave coincide con el mismo patrón que dentes, a continuación, que procesa las palabras clave como guiones.

Para contrarrestar eso, he visto mensajes como éste que muestran cómo utilizar los StandardTokenParsers para especificar palabras clave. Pero entonces, no entiendo cómo especificar los patrones de expresiones regulares! Sí, StandardTokenParsers viene con "Ident" pero no viene con los demás que necesito (complejas representaciones de punto flotante número, una cadena específica patrones literales y reglas para escapar, etc).

¿Cómo se obtiene tanto la posibilidad de especificar palabras clave y la capacidad de especificar patrones de fichas con las expresiones regulares?

¿Fue útil?

Solución

He escrito analizadores solamente RegexParsers derivados, pero lo que sí es algo como esto:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top