2017-12-17 5 views
1

私の問題は、このコードは、この形式のファイルからURLを検出しなければならない私のルールフレックスコードに認識できないルールがあるのはなぜですか?

です:

ftp://[<user>[:<password>]@]<host>[:<port>]/<path>[;<ftptype>]

私はすでにホームブリューとフレックスを更新しました。私は私のルール

を "フレックス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(); 
} 

答えて

0

最初のものが原因である:

あなたはユーザークラス(つまり、正式名称だかどうかわからない)を組み合わせることはできません
{LETRA}({LETRA|DIG}{3,})({LETRA}|{DIG}*) { 

|、それがなければならない:

{LETRA}(({LETRA}|{DIG}){3,})({LETRA}|{DIG}*) { 
1

だけSTARTINとして数値定量化のために、それは

  • {id}である必要があり、ユーザー・クラスを拡張するid
  • REGEXP{number}またはREXEXP{number,number}

とき - "{" "}" が正しく使用されていない:Gポイント書いた:

CAR {"_"|"$"} 

それがあるべきCAR ("_"|"$")CAR [_$]

IDENT {LETRA|"$"|"_"}({LETRA|DIG|"_"|"$"|"-"}*) 

は次のようになります。

IDENT ({LETRA}|"$"|"_")({LETRA}|{DIG}|"_"|"$"|"-")* 
関連する問題