Как объединить Regexp и ключевые слова в сочетателях Scala Parser

StackOverflow https://stackoverflow.com/questions/3770569

Вопрос

Я видел два подхода к строительным парсерах в Scala.

Первый - простирается от RegexParsers и определить ваши выигрываемые лексические узоры. Проблема, в которой я вижу с этим, в том, что я не понимаю, как это касается ключевых слов ключевых слов. Например, если моему ключевому слову соответствует одному и тому же шаблону, что и их ассортимент, то он обрабатывает ключевые слова в качестве недельных.

Чтобы противостоять этому, я видел посты, как Вот этот Это показывает, как использовать стандартные партнеры для указания ключевых слов. Но тогда я не понимаю, как указать рисунки Regexp! Да, StandardTeksParsers поставляется с «идентифицируемым», но он не поставляется с другими, которые мне нужны (сложные представления номера с плавающей запятой, определенные строковые буквальные паттерны и правила для выхода и т. Д.).

Как вы получаете обе возможности указывать ключевые слова и возможность указывать шаблоны токена с регулярными выражениями?

Это было полезно?

Решение

Я только написал RegexParsers-Дщистые парсер, но что я делаю, это что-то подобное:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top