flex and C++

Все о программировании под *nix
Anonymous

flex and C++

Сообщение Anonymous »

народ помогите плиз.
есть прога на С++ для консоли в которой организован ввод комманд и т.п.
надо эти комманды отлавливать с помощью flex'a(lex'a) определять че за комманда и в соответствии с этим заполнять структуру:
struct CommandStruct
{
char command[255]; //собственно комманда
int type;
char message[255];
char dest[255];
};
я пытаюсь переодпределить функцию yylex() и использовать структуру к примеру вот таким образом:

%{
#include <string.h>
#include "client_globals.h" //здесь описанна структура CommandStruct

#define YY_DECL int ScanCommand(scmd) struct CommandStruct* scmd;
YY_BUFFER_STATE newyyin;
%}

%option noyywrap
%x command
%%

newyyin= yy_scan_string(scmd->command);

"/" BEGIN(command);
<command>"send"|"s " {
scmd->type=2;
//ну и все в таком роде
return 2;

}

yy_delete_buffer(newyyin);
return 0;
%%

ну и в результате конечно ничего не работает. даже сие не может нормально откомпилироваться выдавая ошибку parser error во всех местах где идет обращение к элементам структры.

далее как это так скрестить с прогой на C++ чтобы работало вызывая функцию ScanCommand с соотв. параметром?

Anonymous

Сообщение Anonymous »

Надо твой лексовый файл *.l откомпилировать лексом в С-шный код. Если я не ошибаюсь, желательно также extern "C" вокруг объявлений функций. Итого получится функция yylex которую ты сможешь использовать в своих целях.

Ответить