Фильтруйте токены ANTLR4 перед их использованием в парсереC#

Место общения программистов C#
Ответить
Anonymous
 Фильтруйте токены ANTLR4 перед их использованием в парсере

Сообщение Anonymous »

Я пытаюсь создать грамматику, которая игнорирует любой текст внутри неопределенных операторов #if, например токены из этой строки

Код: Выделить всё

#if UNDEFINED
bla bla
#endif
Real Code here
перед передачей в анализатор следует преобразовать в показанный ниже

Код: Выделить всё

#if UNDEFINED
#endif
Real Code here
Моя идея состоит в том, чтобы вручную отсеивать экземпляры IToken после того, как они будут созданы CommonTokenStream. Что отлично работает для меня. Однако я пытаюсь выяснить, как лучше всего передать отфильтрованный список экземпляров IToken в анализатор. Изначально я рассматривал TokenStreamRewriter, однако этот парень, похоже, не делает то, что мне нужно.
Примечание: я не могу использовать синтаксический анализатор для выполнения этой работы, потому что парсеру это не нравится. незаконный неопределенный контент.
Сейчас я подумываю о создании подтипа CommonTokenStream, когда я бы установил поле токенов вручную и передал этот экземпляр синтаксическому анализатору. Но я не уверен, что это лучший способ.
Изменить: возможно, образец вводит в заблуждение, UNDEFINED — это всего лишь пример, на практике это может быть что угодно, даже определенное с помощью #define. заявление.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-parser
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»