c - scanner.l:22:警告,规则无法匹配
问题描述
我目前正在尝试编写一个程序来计算 .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++;
}
(对于其他人也是如此)
推荐阅读
- javascript - 页面重新加载后保存草稿,无需通过 js 或 php 注册
- css - 如何制作css渐变?
- android - 使用 Rx 在一个请求中合并两个变量
- javascript - 使用express的nodejs应用程序中的JS文件中的EJS变量
- sql - 用于在 hive 中增加时间图的行号
- python - 如何设置 Flask flask_mongo_sessions TTL
- laravel - 如何在不重新加载 laravel nova 中的整个页面的情况下更新资源详细信息视图?
- iframe - 在 iFrame 中嵌入 Microsoft 登录?
- python - Python - 如何返回一个字符串,其中每个数字都被相应数量的感叹号(!)
- python - 使用pickle load获取一行数据并显示在表格中?