我编写了一个程序来使用 lex 和 yacc 读取文本文件的数据。我想比较该文本文件上的“状态”并在之后检索单词。我使用了下面的代码。但它提供了该文本文件中的所有文本。请帮助
[0-9a-zA-Z]*"\n" { if (strcmp("State: ",yytext)!=0)
{
printf(yytext,"\n");}
}
我编写了一个程序来使用 lex 和 yacc 读取文本文件的数据。我想比较该文本文件上的“状态”并在之后检索单词。我使用了下面的代码。但它提供了该文本文件中的所有文本。请帮助
[0-9a-zA-Z]*"\n" { if (strcmp("State: ",yytext)!=0)
{
printf(yytext,"\n");}
}
您最好更正确地定义您的令牌解析和语法,以便通过构建 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.html或http://aquamentus.com/tut_lexyacc.html