ANTLR Сделать определенный токен или регистр нечувствительным к регистру - PullRequest
1 голос
/ 09 апреля 2019

Я ищу способ сделать некоторые конкретные токены нечувствительными к регистру в моем парсере ANLTR.То, что я уже пробовал:

  1. Преобразование ввода для всех строчных букв.Это не сработало, для некоторых частей моей грамматики требуется чувствительность к регистру.

  2. Сохранение версии токенов в верхнем и нижнем регистре.Это также не сработало, потому что мой файл лексера стал слишком большим (превысил ограничение в 64 КБ ANTLR).

Я надеюсь, что существует какой-то трюк с регулярными выражениями или, возможно, флаг ANTLR, которыйговорит парсеру обрабатывать определенные токены по-разному.


Пример:

SENSITIVETOKEN
:
    'footoken' 
;

INSENSITIVETOKEN
:
    'bootoken'  (some magic here)
;

Лексер должен распознавать "BOOTOKEN" как INSENSITIVETOKEN
но не "FOOTOKEN" как SENSITIVETOKEN


Спасибо за вашу помощь!^^

1 Ответ

1 голос
/ 09 апреля 2019

Одним из возможных решений может быть объявление однобуквенных фрагментов и создание токенов на основе этих фрагментов.

Пример:

INSENSITIVETOKEN
:
    B O O T O K E N
;

fragment B: ('B'|'b');
fragment O: ('O'|'o');
fragment T: ('T'|'t');
fragment K: ('K'|'k');
fragment E: ('E'|'e');
fragment N: ('N'|'n');

Или, если не так много регистронезависимыхтокены, просто:

INSENSITIVETOKEN
:
    ('B'|'b')('O'|'o')('O'|'o')('T'|'t')('O'|'o')('K'|'k')('E'|'e')('N'|'n')
;
...