如何使用lex和yacc阅读单词?

时间:2013-06-09 04:45:12

标签: compiler-construction bison yacc lex

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

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

1 个答案:

答案 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 ToolsPrinciples of Compiler Design

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