scanner.l: 22: предупреждение, правило не может быть найдено - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я пытаюсь написать программу, которая подсчитывает количество символов и строк в файле .in.Проблема в том, что когда я ввожу команду:

 lex scanner.l

Она выдает ошибку, которая говорит:

scanner.l:22:warning, rule cannot be matched

Я был бы признателен за любую помощь в этом вопросе.Ниже мой код:

%option noyywrap
%{
#include <stdio.h>
#include <math.h>
int charno=0;
int lineno=0;
%}

character [a-zA-Z]
line [\n]
digit [0-9]

%%

{digit}
        {
                charno++;
        }

{character}
        {
                charno++;
        }
{line}
        {
                lineno++;
        }
.      
        {
                charno++;
        }

%%
int main(int argc, char **argv)
{
            ++argv, --argc; /*skip over program name */
            if (argc > 0)
                    yyin = fopen(argv[0], "r");
            else
                    yyin = stdin;
            yylex();

            printf("Number of characters: %d ", charno);
            printf("Number of lines:      %d ", lineno);
            return 0;
}

1 Ответ

0 голосов
/ 12 сентября 2018

Не должно быть новой строки между соответствующим токеном и действием.Итак:

{digit}
        {
                charno++;
        }

должно быть:

{digit} {
                charno++;
        }

(и аналогично для остальных)

...