需要匹配整数类型但它必须只是分隔整数。例如:
INTEGER (-?[0-9]+)
NOTENDLINE [^$]
%%
{INTEGER}/{NOTENDLINE} {}
%%
如果我输入类似" 23test"的字符串,则它必须是错误的并且没有匹配的整数。但我的解决方案并不是按需要工作。我不知道在NOTENDLINE中我需要什么。
答案 0 :(得分:1)
这对你有用吗?它依赖于词法分析器将找到最长匹配规则的事实,但如果两个相等,则将使用第一个规则。
%option noyywrap
DIGIT [0-9]
OTHER [a-z0-9]*
%%
{DIGIT}+ printf( "Integer: %s (%d)\n", yytext, atoi( yytext ) );
{OTHER} printf( "Other: %s\n", yytext );
[ \t\n]+ /* eat up whitespace */
%%
int main( int argc, char **argv )
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
}
示例输入(文件):
test
test123
123
123test
示例输出:
Other: test
Other: test123
Integer: 123 (123)
Other: 123test
答案 1 :(得分:0)
如果要匹配整数,但只有后跟空格,请直接执行:
-?[[:digit:]]+/[[:space:]]
如果整数位于没有换行符的文件的最末端,则会失败,但是文本文件不应该以换行符以外的任何内容结尾。但是,您可以执行以下操作:
-?[[:digit:]]+/[[:space:]] { /* Handle an integer */ }
-?[[:digit:]]+/. { /* Handle the error */ }
-?[[:digit:]]+ { /* Handle an integer; this one must be at EOF */ }