0

我编写了一个程序来使用 lex 和 yacc 读取文本文件的数据。我想比较该文本文件上的“状态”并在之后检索单词。我使用了下面的代码。但它提供了该文本文件中的所有文本。请帮助

[0-9a-zA-Z]*"\n" { if (strcmp("State: ",yytext)!=0)
{
printf(yytext,"\n");}
}
4

1 回答 1

1

您最好更正确地定义您的令牌解析和语法,以便通过构建 AST 获得您想要的值,然后您可以处理您的值:

词法分析器.l:

"State" {
    return STATE;
}

[0-9a-zA-Z]* {
    return STATE_VALUE;
}

解析器.y:

%token STATE
%token STATE_VALUE
%left ':'

state_command: STATE ':' STATE_VALUE {
    // do stuff here
}

当然它远未完成,但这只是为了给你一个想法。你真的应该读一读龙的书:编译器:编译器设计的原则、技术和工具原则

您还可以找到可以帮助您构建编译器的简单示例:http: //epaperpress.com/lexandyacc/index.htmlhttp://aquamentus.com/tut_lexyacc.html

于 2013-06-09T12:56:50.943 回答