【问题标题】:Why is there an unrecognized rule in my flex code?为什么我的弹性代码中有无法识别的规则?
【发布时间】:2017-12-17 16:39:45
【问题描述】:

我的问题就是我的规则

此代码必须从这种格式的文件中检测 URL:

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

我已经更新了 homebrew 和 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();
}

【问题讨论】:

    标签: c flex-lexer lex


    【解决方案1】:

    作为一个起点:“{”“}”没有被正确使用——应该是

    • {id} 扩展用户类id
    • REGEXP{number}REXEXP{number,number} 用于数字量化

    你写的时候:

    CAR {"_"|"$"}
    

    应该是CAR ("_"|"$")CAR [_$]

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

    应该是:

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

    【讨论】:

      【解决方案2】:

      第一个是因为:

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

      您不能将用户类(不确定这是否是正式名称)与 | 结合使用,它必须是:

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

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 2014-02-06
        • 2021-07-02
        • 2016-11-30
        • 2022-11-18
        • 2016-10-17
        相关资源
        最近更新 更多