问题描述
我收到“[”和“]”的警告,但我不知道问题出在哪里。
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;
}
解决方法
sym [a-zA-z]
错了,应该是:
sym [a-zA-Z]
看起来 A-z
匹配从 A
到 z
的任何字符,但在 Z
和 a
之间包括 [
和 {{1} }.