2016-11-01 8 views
0

how to execute code after yylex(); commandКак завершить ввод в Лекса при выполнении на CMD win7

У меня та же проблема, что и выше вопрос, не в состоянии выполнить что-либо ниже yylex()

%{ 
     #include<stdio.h> 
     int vowel=0; 
     int cons=0; 
    %} 
    %% 
    "a"|"e"|"i"|"o"|"u"|"A"|"E"|"I"|"O"|"U" {printf("is a VOWEL");vowel++;} 
    [a-zA-z] {printf("Is a Consonant");cons++;} 
    %% 
    int yywrap() 
    { 
    return 1; 
    } 
    main() 
    { 
    printf("Enter String\n"); 
    yylex(); 
    printf("vowel=%d and Consonent=%d",vowel,cons);//how to execute this statement? 
    } 

я на win7 и ответ говорит, чтобы закончить ввод с помощью Ctrl + d (в CMD не работает).

Итак, как закончить ввод, который позволяет выполнить следующий оператор?

ответ

1

Итак, как закончить ввод, который позволяет выполнить следующий оператор?

yylex() будет продолжать ждать и ввода процесса, пока он не видит конца из файла или он выполняет действие, которое выполняет явное return.

Windows-аналог Ctrl + D id Ctrl + Z, поэтому вы можете попробовать это, но было бы лучше настроить lexer с правилом, которое заставляет его возвращаться. Например, если вам нужна только одна строка ввода (для каждого вызова), вы можете вернуть ее, когда она читает новую строку. Однако обратите внимание, что yylex() может записывать входные символы, что может привести к потере некоторых необработанных входных данных, если вы попытаетесь прочитать один и тот же входной файл после возврата yylex(), за исключением того, что снова вызываете yylex().