CDT Lexer: получите токены для комментариев - PullRequest
2 голосов
/ 16 апреля 2019

Я хочу написать редактор в моем плагине Eclipse, который может обрабатывать язык моего инструмента.Язык основан на C / C ++ с дополнительными ключевыми словами и аннотациями.Я успешно написал свой собственный класс Language, который расширяет GPPLanguage и использует соответствующую точку расширения CDT.

Основная проблема, с которой я сталкиваюсь, состоит в том, что мой язык имеет keywords inside comments.

.часто используется такой язык:

/** @ctPrint
 * 
 * This is a real comment, describing this block.
 *
 * @author    Sadik     // This looks like a comment, but it's part of the syntax. The compiler will treat this in a special way.
 * @tag       CT-001    // The @tag is part of syntax, the real comment starts with //
 * @result    TRUE      // Again, @result is part of the syntax.
 * 
 * This is a final description.
 */

Так что некоторые части внутри комментариев не обрабатываются моим компилятором как комментарии (расширяющие g ++).Вот почему я хочу отобразить эти части внутри затмения с подсветкой.

Насколько я понимаю из , этот ответ заключается в том, что первым, кто станет активным во время обработки необработанного исходного кода, будетЛексер.Это часть документации CDT Lexer:

Короче говоря, этот класс преобразует окончания строк (в '\ n') и триграфы
(в соответствующие им символы), удаляет сращения строк, комментарии и пробелы, кроме новой строки.Возвращает токены препроцессора.

Таким образом, Lexer выбрасывает части моего исходного кода и не маркирует его.Поскольку Lexer объявлен финальным, он не предназначен для его расширения и повторного использования.

Если у меня есть парсер, который расширяет CDT GNUCPPParser, этот парсер не сможет «увидеть» мои комментарии, потому что естьдля них нет жетонов.Как я могу получить токены для этой части?

1 Ответ

2 голосов
/ 17 апреля 2019

Хотя токены комментариев не передаются анализатору обычным способом (например, они не будут отображаться в результате consume()), они не удаляются полностью: они сохраняются препроцессором и становятся доступны как IASTComment узлы через IASTTranslationUnit.getComments().Вы можете использовать это для запроса комментариев в качестве шага после анализа, анализа их содержимого и затем выделения диапазонов источников, соответствующих вашим специальным токенам.

...