Avatar billede krismort Nybegynder
03. oktober 2006 - 22:53 Der er 4 kommentarer

flex og manual feed af data istedet for fil

Hej,
Er der en som kender til brug af flex + cpp som kan hjælpe mig med hvordan jeg gør så jeg manualt kan give flex data istedet for at den SKAL læse det fra en fil det må da være muligt.

Takker
Kristian
Avatar billede bertelbrander Novice
03. oktober 2006 - 23:07 #1
Jeg har kun arbejdet lidt med flex, arbejdet lidt videre på et projekt.

I dette projekt er der en en YY_INPUT macro som bliver kaldt for at hente mere indput.

I mit projekt kalder den getc, men man kan let ændre den til at hente fra hukommelsen.

Man kan dog, så vidt jeg kan se, ikke kalde en funktion for hver tegn der skal behandles.
Avatar billede arne_v Ekspert
03. oktober 2006 - 23:13 #2
Jeg har noget gammelt kode (9 aar) som indeholder foelgende:

// no echo of unmatched characters
#define ECHO /* no echo */

// pure parser
#define YY_DECL extern "C" int cmd_lex YY_PROTO((YYSTYPE *yylvalp))

// buffer for lexical analysis
#define buffer cmd_buffer
YY_BUFFER_STATE buffer = NULL;

%}

%option prefix="cmd_"
%option noyywrap

D                    [0-9]
L                    [A-Za-z$_]
A                    [A-Za-z0-9$_]
LX                    [A-Za-z$_\*\.?]
AX                    [A-Za-z0-9$_\*\.?]

%%

{D}+                  { yylvalp->str = new char[strlen(yytext)+1];
            strcpy(yylvalp->str,yytext);
            return NUMBER; }
\"(([^\"])|(\"\"))*\" { yylvalp->str = new char[strlen(yytext)+1];
            strcpy(yylvalp->str,yytext);
            return QTEXT; }
{LX}+{AX}*            { yylvalp->str = new char[strlen(yytext)+1];
            strcpy(yylvalp->str,yytext);
            if(cmd_exist_opt(yytext)) {
              return OPTION;
            } else {
              return NAME;
            }
              }
"("                  { return '('; }
")"                  { return ')'; }
"="                  { return '='; }
":"                  { return ':'; }
"-"                  { return '-'; }
"/"                  { return '/'; }
","                  { return ','; }
"\0"                  { return EOF; }

%%

// store command-line-string for scanning
void cmd_store_str(char *s)
{
  if(buffer!=NULL) yy_delete_buffer(buffer);
  buffer = yy_scan_string(s);
  return;
}
Avatar billede arne_v Ekspert
03. oktober 2006 - 23:18 #3
jeg kan ikke huske noget om koden

men hvis cmd_store_str goer hvad jeg tror den goer saa smager det lidt af fugl
Avatar billede arne_v Ekspert
10. december 2006 - 00:11 #4
krismort ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester