У меня есть экспериментальный исходный файл flex (lex.l):
<code>%option noyywrap
%{
int chars = 0;
int words = 0;
int lines = 0;
%}
delim [ \t\n]
ws {delim}+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+(.{digit}+)?(E[+-]?{digit}+)?</p>
<p>%%</p>
<p>{letter}+ { words++; chars += strlen(yytext); printf("Word\n"); }
\n { chars++; lines++; printf("Line\n"); }
. { chars++; printf("SomethingElse\n"); }</p>
<p>%%</p>
<p>int main(argc, argv)
int argc;
char **argv;
{
if(argc > 1)
{
if(!(yyin = fopen(argv[1], "r")))
{
perror(argv[1]);
return (1);
}
}</p>
<p>yylex();</p>
<p>printf("lines: %8d\nwords: %8d\nchars: %8d\n", lines, words, chars);
}
Я создал входной файл с именем "input.txt "с надписью" красное яблоко ".Командная строка:
<code>$ flex lex.l
$ cc lex.yy.c
$ ./a.out < input.txt
Word
SomethingElse
Word
Line
lines: 1
words: 2
chars: 10
Поскольку во входном файле нет символа новой строки, почему "\ n" в lex.l является шаблономсоответствует?(«Строки» должны быть 0, а «символы» должны быть 9)
(я использую OS X.)
Спасибо за ваше время.