[问题] lex 编译出问题

楼主: alpho (Whyyyyy)   2015-05-07 12:55:00
/* 听说注明使用的语言、环境
* 问题有可能较容易被解决...
*/
我是用flex去写lex,然后转成lex.yy.c再编译成a.exe
%option noyywrap
%{
#include<stdio.h>
%}
%%
([(1)?[0-9]{1,2}|2[0-4][0-9]|2[5][0-5]]\.){3,3}
[1?[0-9]{1,2}|2([0-4])[0-9]|25[0-5]] { printf( yytext) ;}
. { }
%%
int main(void)
{
yylex();
return 0;
}
题目要求给一串字串,从里面挑出符合IP格式的输出 "0~255.0~255.0~255.0~255" ←这样
然后结果:
C:\Users\USER>flex pd2.l
C:\Users\USER>g++ lex.yy.c
pd2.l: In function 'int yylex()':
pd2.l:8:2: error: expected identifier before numeric constant
pd2.l:8:57: warning: lambda expressions only available with -std=c++11 or
-std=gnu++11 [enabled by d
efault]
pd2.l:9:2: error: expected ';' before 'break'
不过只要把最后判定的 [1?[0-9]{1,2}|2([0-4])[0-9]|25[0-5]] delete掉,编译就
能通过。
所以有点搞不懂问题出在哪,求解。
作者: pccts (pccts)   2015-05-25 21:34:00
用 debian-6 的 flex 2.5.35 + gcc 4.5.5 试, 没问题.

Links booklink

Contact Us: admin [ a t ] ucptt.com