我目前正在尝试编写一个程序来计算.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;
}
答案 0 :(得分:4)
匹配的令牌和操作之间不应有换行符。所以:
{digit}
{
charno++;
}
应为:
{digit} {
charno++;
}
(其他类似)