Как объединить Regexp и ключевые слова в сочетателях Scala Parser
-
04-10-2019 - |
Вопрос
Я видел два подхода к строительным парсерах в 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