试图使用Lex检查有效的电子邮件,而出现“未定义的定义”错误

问题描述 投票:0回答:1

早上好。我正在尝试使用Lex创建一个简单的程序,该程序检查给定的电子邮件地址是否有效。这就是我实际上试图实现的方式:

声明部分

%{
#include <stdio.h>
#include <string>

int correct = 0;
string email;
void write_data(string email, int correct);

/* Alias section */
name      [a-zA-Z]
special    [-_%+-]
digit      [0-9]
domain     [a-z]\.[a-z]{2,5}
email      {name}+({digit} | {special})*@{domain}{1}
%}

规则部分

%%
{email}    {correct = 1;}
%%

程序部分

int main(int argc, char* argv[])
{
    if(argc == 2){
        yyin = fopen(argv[1], "r");
        email = yyin.getline();

        if(yyin == NULL){
            printf("Couldn't open %s file\n", argv[1]);
            exit(-1);
        }
    }

    else{
        yyin = stdin;
        email = yytext;
    }

    correct = 0;
    yylex();
    write_data(email, correct);

    return 0;
}

void write_data(string email, int correct)
{
    if(correct == 1)
        printf("Email %s is correct\n", correo);

    else   
        printf("Email %s is not correct\n", correo);
}

我正在尝试使用来调用Lex工具

lex template.l

并且我收到以下错误:

template.h:40:未定义的定义{email}

我已经尝试了一段时间,但我什至无法在其上运行Lex,所以我不知道有什么问题。

lex
1个回答
0
投票

我为有兴趣的人弄明白了。您必须将别名放在第一个%{%}部分之外。声明部分的结果如下:

%{
#include <stdio.h>
#include <string>

int correct = 0;
string email;
void write_data(string email, int correct);
%}

/* Alias section */
name      [a-zA-Z]
special    [-_%+-]
digit      [0-9]
domain     [a-z]\.[a-z]{2,5}
email      {name}+({digit} | {special})*@{domain}{1}
© www.soinside.com 2019 - 2024. All rights reserved.