【问题标题】:scanner.l:22: warning, rule cannot be matchedscanner.l:22:警告,规则无法匹配
【发布时间】:2018-09-12 07:54:34
【问题描述】:

我目前正在尝试编写一个程序来计算 .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;
}

【问题讨论】:

    标签: c compiler-construction lex


    【解决方案1】:

    匹配的标记和操作之间不应有换行符。所以:

    {digit}
            {
                    charno++;
            }
    

    应该是:

    {digit} {
                    charno++;
            }
    

    (对于其他人也是如此)

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      相关资源
      最近更新 更多