Откуда берется "новая строка" (\ n)?(сопоставление с шаблоном "flex") - PullRequest
1 голос
/ 08 февраля 2011

У меня есть экспериментальный исходный файл 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.)

Спасибо за ваше время.

1 Ответ

0 голосов
/ 08 февраля 2011

Вполне возможно, что ваш текстовый редактор автоматически вставил новую строку в конец файла.

...