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

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

я прочел глава «Руководство по С ++» по Flex… ну и что делать … разве мой 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\"]*\"....

2

Решение

Здесь нет 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" для другого.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]