Я пишу lexer для препроцессора C среди некоторых других синтаксисов Си. В рамках этого я должен определить имена файлов в #include. Проблема, в которой я застрял, заключается в определении имени файла. Имя файла содержит две части: базовое имя и расширение. Базовое имя можно идентифицировать с помощью регулярного выражения «IDENTIFIER» lexer; так может быть "." разделяя их.Конкатенированные жетоны в Lex
Существует отдельное регулярное выражение для «IDENTIFIER» и для «.». Для имени файла я рассматриваю возможность написания другого регулярного выражения, которое будет в основном конкатенацией «IDENTIFIER», «.». и "h". Мой вопрос в том, что если я напишу регулярное выражение для имени файла, как я описал; как он будет обрабатываться. Учитывая тот факт, что уже существует правило для отдельных токенов; вместо идентификации имени файла он идентифицирует 3 токена (IDENTIFIER, DOT и IDENTIFIER) или будет ли он идентифицировать имя файла?
спасибо. Я не знал о контекстно-зависимой грамматике, и предыдущие поисковые запросы были бесполезны. Спасибо alot – Sharad
@sharad: вы также можете посмотреть раздел [flex manual для нескольких буферов] (http://flex.sourceforge.net/manual/Multiple-Input-Buffers.html#Multiple-Input-Buffers), который содержит пример кода для использования стека буферов для реализации функциональности «включить». – rici