Регулярное выражение для несоответствия определенным строкам - PullRequest
0 голосов
/ 03 июля 2018

Я использую flex для написания сканера для кода verilog. Я хочу написать регулярное выражение, которое принимает все символы, кроме слов

define, ifdef, //, / *.

Я пробовал использовать концепцию негативного прогнозирования, но похоже, что flex ее не поддерживает

Пример: если есть строка

assign a = b;  **This should be scanned in the same expression**
assign a =b; //comment **Here line assign a=b should match the regex, but //comment should not match.**

1 Ответ

0 голосов
/ 13 августа 2018

Чтобы проглотить такие линии в flex, нужно захватить символы, а затем не излучать их. Если вы хотите удалить только эти токены и передать все остальное, у вас просто есть правила исключения токенов, которые имеют более высокий приоритет для сканирования этих токенов, а затем в конце есть правило, которое соответствует одному символу и выдает его.

Чтобы записать однострочный комментарий в flex, вы можете использовать что-то вроде //.*\n и сделать так, чтобы символы не выделялись.

Для многострочного комментария "/*".*"*/"

А для слов, которые вы просто окружаете их в qoutes, как "#ifdef"

Проверьте здесь больше http://people.cs.aau.dk/~marius/sw/flex/Flex-Regular-Expressions.html

РЕДАКТИРОВАТЬ: Вам не нужно смотреть в будущее для удаления структур, таких как комментарии, они являются обычным языком и, следовательно, могут быть описаны с помощью регулярного выражения.

...