Как извлечь ключевые слова из лексера antlr - PullRequest
0 голосов
/ 23 января 2020

Я создаю текстовый редактор в Java для грамматики, которую я не написал, и я хотел бы поддержать подсветку синтаксиса. У меня есть файл лексера с ключевыми словами (ниже приведено подмножество):

DATABASE: 'DATABASE';
NATIVE: 'NATIVE' -> mode(NATIVE_QUERY);
SOURCE: 'SOURCE';
CHECK: 'CHECK';
ACTION: 'ACTION';
EXECUTE: 'EXECUTE';
USING: 'USING';
ON: 'ON';
EACH: 'EACH';
FROM: 'FROM';

Я хотел бы динамически читать эти ключевые слова, чтобы использовать их для выделения синтаксиса этих ключевых слов в текстовом редакторе, который я делаю , В настоящее время я делаю это вручную, но я хочу, чтобы текстовый редактор делал это динамически в случае, если авторы меняют лексер. Как мне это сделать? Это правильный путь к go об этом?

1 Ответ

1 голос
/ 24 января 2020

Я не думаю, что в самом Antlr есть механизм атрибуции тегов «ключевые слова», но об этом вы должны прочитать. Вместо этого вы можете применить хак, который предполагает порядок в грамматике, посредством которого вы определяете первое и последнее правила для ключевых слов «DATABASE» и «FROM». Затем запишите метод в go через массив ruleNames [], который вы можете вызывать в любое время для накопления всех имен ключевых слов между первым и последним именами правил, которые вы определили выше. Чтобы это работало, вам нужно написать несколько комментариев, в которых будет что-то вроде «// О суровом наказании, только добавляйте ключевые слова в правилах между« DATABASE »и« FROM ». Однако правила лексера Antlr упорядочены по предпочтению соответствия, поэтому взлом может не сработать.

...