flex не генерирует заголовок yyFlexLexer.h

Я написал несколько парсеров перед использованием flex для создания лексера, но на этот раз я хотел, чтобы flex сгенерировал класс Lexer вместо классического файла C, т.е. я хотел, чтобы flex сгенерировал класс сканера C++... дело в том, что он не генерирует yyFlexLexer.h для меня, только lex.yy.cc

Я прочитал главу по руководству по Flex C++... так что не знаю, что делать... неужели мой flex для windows не работает должным образом?

Это гибкие опции, которые я сейчас использую:

%option outfile="cmdsLexer.cpp"
%option stdinit
%option case-insensitive
%option c++

%{
    #include "global-scope.h"
%}

ANDIGIT     [a-zA-Z0-9]
IDNTIFIER   [a-zA-Z_]({ANDIGIT}|_|-)*
INTEGER     [-+]?[0-9]+
STRING      \"[^\n\"]*\"
....

1 ответ

Решение

Здесь нет yyFlexLexer.h файл. Вместо этого cmdsLexer.cpp файл будет содержать строку

#include <FlexLexer.h>

Обратите внимание на использование угловых скобок вместо двойных кавычек. Этот файл должен быть установлен в вашей системе, например, как /usr/include/FlexLexer.h, Это то же самое для каждого лексера. Для Windows путь, очевидно, будет другим. Просто найдите файл в вашей гибкой установке и добавьте его к пути, который ваш компилятор ищет для заголовочных файлов, например, используя -I вариант для gcc.

Также обратите внимание на последний абзац документа, на который вы ссылались для расширенного использования этого заголовка:

Если вы хотите создать несколько (разных) классов лексеров, вы используете-Pфлаг (или prefix= вариант) переименовать каждый yyFlexLexer к другомуxxFlexLexer". Затем вы можете включить <FlexLexer.h> в других ваших источниках один раз за класс лексера, сначала переименовав yyFlexLexer следующее:

     #undef yyFlexLexer
     #define yyFlexLexer xxFlexLexer
     #include <FlexLexer.h>

     #undef yyFlexLexer
     #define yyFlexLexer zzFlexLexer
     #include <FlexLexer.h>

если, например, вы использовали %option prefix="xx" для одного из ваших сканеров и %option prefix="zz" для другого.

Другие вопросы по тегам