我目前正在尝试编写一个计算.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;
}
匹配的令牌和操作之间不应该有换行符。所以:
{digit}
{
charno++;
}
应该 :
{digit} {
charno++;
}
(和其他人一样)