我的问题是我的规则
此代码必须检测此格式的文件中的URL:
ftp://[<user>[:<password>]@]<host>[:<port>]/<path>[;<ftptype>]
。
我已经更新了自制软件和flex。我正在使用&#34; flex example.flex&#34;编译,并尝试使用&#34; ./ a.out file.txt&#34;
执行我的规则:
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();
}
答案 0 :(得分:1)
作为一个起点:&#34; {&#34; &#34;}&#34;没有正确使用 - 它应该是
{id}
展开用户类id
REGEXP{number}
或REXEXP{number,number}
进行数字量化当你写道:
CAR {"_"|"$"}
应为CAR ("_"|"$")
或CAR [_$]
IDENT {LETRA|"$"|"_"}({LETRA|DIG|"_"|"$"|"-"}*)
应该是:
IDENT ({LETRA}|"$"|"_")({LETRA}|{DIG}|"_"|"$"|"-")*
答案 1 :(得分:0)
第一个是因为:
{LETRA}({LETRA|DIG}{3,})({LETRA}|{DIG}*) {
你不能将用户类(不确定这是否是官方名称)与|组合,它必须是:
{LETRA}(({LETRA}|{DIG}){3,})({LETRA}|{DIG}*) {