首页 > 解决方案 > Lex:规则无法匹配

问题描述

我收到“[”和“]”的警告,但我不知道问题出在哪里。

lex.l:27:警告,规则无法匹配

lex.l:28:警告,无法匹配规则

%{
#include <stdio.h>
#include "y.tab.h"
%}

delim [ \t\n]
ws {delim}+
digit [0-9]
number {digit}+
real_number [0-9]+\.[0-9]+([eE][0-9]+)?
sym [a-zA-z]
word {sym}+[a-zA-Z0-9_]*
instruction [0-9xX]+

%%
{delim} {}
{instruction} { yylval.cval = yytext; return INSTRUCTION; }
{real_number} { yylval.dval = atof(yytext); return REAL_NUMBER; }
{word} { yylval.cval = strdup(yytext); return WORD; }

"--".* { /* empty */ }
":=" { return EQUATE; }
"[" |
"]" |
"(" |
")" |
";" |
":" |
"," |
"." |
"*" |
"\"" { return yytext[0]; }
%%

int yywrap (void)
{
    return 1;
}

标签: parsinglex

解决方案


sym [a-zA-z]

错了,应该是:

sym [a-zA-Z]

看起来A-z匹配任何字符 from Atoz但介于Zanda包括[and ]


推荐阅读