我编写了一个使用lex和yacc读取文本文件数据的程序。我希望比较该文本文件中的“State”并在此之后检索该单词。 我使用了下面的代码。但它提供了该文本文件中的所有文本。请帮助
[0-9a-zA-Z]*"\n" { if (strcmp("State: ",yytext)!=0)
{
printf(yytext,"\n");}
}
答案 0 :(得分:1)
您最好更准确地定义您的令牌解析和语法,因此它通过构建AST获得您想要的值,然后您可以处理您的值:
lexer.l:
"State" {
return STATE;
}
[0-9a-zA-Z]* {
return STATE_VALUE;
}
parser.y:
%token STATE
%token STATE_VALUE
%left ':'
state_command: STATE ':' STATE_VALUE {
// do stuff here
}
当然它远非完整,但它只是给你这个想法。你应该真的读过龙书:Compilers: Principles, Techniques, and Tools和Principles of Compiler Design。
您还可以找到可以帮助您构建编译器的简单示例:http://epaperpress.com/lexandyacc/index.html或http://aquamentus.com/tut_lexyacc.html