2017-08-05 2 views
0
digit [0-9] 
letter [A-Za-z] 
%{ 
int count; 
%} 
%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 
int main(void) { 
yylex(); 
printf("number of identifiers = %d\n", count); 
return 0; 
} 

Funktioniert nicht printf Anweisung. können Sie erklären, was ich in diesem Code einschließen sollte.Warum zeigt der folgende Flex-Code keine Ausgabe?

+0

beendet das Programm korrekt? – Jack

+0

Nein endet nicht. –

+0

Willkommen bei Stack Overflow. Bitte lesen Sie in Kürze die Abschnitte [Info] und [Fragen] und noch dringlicher, wie Sie ein MCVE ([MCVE]) erstellen können. Sie haben einen Code zur Verfügung gestellt, der gut ist. Sie haben weder die Eingabedaten noch die Art der Bereitstellung der Daten für das Programm beschrieben. Ihre Erklärung "printf-Anweisung funktioniert nicht" ist nicht hilfreich. Sie sollten deutlicher sein, was Sie beobachten. Beachten Sie auch, dass [tag: flex] nicht identisch mit [tag: flex-lexer] ist - und dass letzteres das richtige für den Flex lexical analyzer (oder Lexer) ist. Das andere Tag ist für die Adobe-Websprache Flex. –

Antwort

0

Wenn Sie einen Fehler mit yywrap haben - nur hinzufügen %option noyywrap:

digit [0-9] 
letter [A-Za-z] 
%{ 
    int count; 
%} 

%option noyywrap 

%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 

int main(void) { 
    yylex(); 
    printf("number of identifiers = %d\n", count); 
    return 0; 
} 

Dann kompilieren:

flex f.l 
gcc lex.yy.c 

Run und nicht EOF am Ende zu senden vergessen (mit Ctrl -D):

./a.out 
a a a 

number of identifiers = 3