Грамматика PEG для разбора имени идентификатора, не являющегося ключевым словом - PullRequest
0 голосов
/ 05 мая 2020

Я использую для парсинга Pest.rs. Мне нужно проанализировать идентификаторы, но отклонить их, если они оказались зарезервированным ключевым словом. Например, bat - допустимое имя идентификатора, а this - нет, поскольку оно имеет значение c. Моя упрощенная грамматика выглядит так:

keyword = {"this" | "function"}
identifier = {ASCII+}
valid_identifier = { !keyword ~ identifier }

Это работает, но также отклоняет имена идентификаторов, такие как thisBat. Поэтому в основном он проверяет, не является ли этот префикс keyword, но я хочу проверить полное identifier.

1 Ответ

0 голосов
/ 06 мая 2020

придумал хак, чтобы решить эту проблему.

keyword = {"this" | "function"}
identifier = {ASCII+}
valid_identifier = @{ !keyword ~ identifier | keyword ~ identifier }

Новое второе правило в valid_identifier заботится о сопоставлении с допустимым регистром, который отклоняется первым. Обратите внимание, что я сделал valid_identifier atomi c, чтобы пробелы не вставлялись, а вывод синтаксического анализа не был похож на this и Bat, а был как один thisBat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...