我的问题是我的规则
此代码必须以此格式检测文件中的URL:
ftp://[<user>[:<password>]@]<host>[:<port>]/<path>[;<ftptype>]
。
我已经更新了自制软件和flex。我正在使用“flex example.flex”进行编译,并尝试使用“./a.out file.txt”执行
我的规则:
LETRA [A-Za-z]
DIG [0-9]
CAR {"_"|"$"}
IDENT {LETRA|"$"|"_"}({LETRA|DIG|"_"|"$"|"-"}*)
%%
{LETRA}({LETRA|DIG}{3,})({LETRA}|{DIG}*) {
printf("(<user>,%s)",yytext);
}
{LETRA}{CAR}({LETRA|DIG|CAR}{4,})({LETRA|DIG|CAR}*)|
{LETRA}{LETRA|DIG}{CAR}({LETRA|DIG|CAR}{3,})|
{LETRA}({LETRA|DIG}{2}){CAR}{LETRA|DIG|CAR}{2,}|
{LETRA}({LETRA|DIG}{3}){CAR}({LETRA|DIG|CAR}+)|
{LETRA}({LETRA|DIG}{4}){CAR}({LETRA|DIG|CAR}*)|
{LETRA}({LETRA|DIG}{5}){CAR}({LETRA|DIG|CAR}*) {printf("(<password>,%s)",yytext);}
({IDENT[.]}+{IDENT})+ {
printf("(<host>,%s)",yytext);
}
{DIG}({DIG})* {
printf("(<port>,%s)",yytext);
}
({IDENT[/]}+{IDENT})+ {
printf("(<path>,%s)",yytext);
}
{[#]DIG}({DIG})* {
printf("(<ftptype>,%s)",yytext);
}
. {printf("%s",yytext);}
%%
int main(){
yylex();
}
作为一个起点:“{”“}”没有被正确使用 - 它应该是
{id}
扩展用户级id
REGEXP{number}
或REXEXP{number,number}
用于数字量化你写的时候:
CAR {"_"|"$"}
它应该是CAR ("_"|"$")
或CAR [_$]
IDENT {LETRA|"$"|"_"}({LETRA|DIG|"_"|"$"|"-"}*)
应该:
IDENT ({LETRA}|"$"|"_")({LETRA}|{DIG}|"_"|"$"|"-")*
第一个是因为:
{LETRA}({LETRA|DIG}{3,})({LETRA}|{DIG}*) {
你不能将用户类(不确定这是否是官方名称)与|组合,它必须是:
{LETRA}(({LETRA}|{DIG}){3,})({LETRA}|{DIG}*) {