2012-03-03 46 views
0

我试图打印出使用词法分析器“flex”的词法和令牌,问题是我可以找到词法分析器,只能打印令牌而不是词法。这是简单的代码,我用你可以看到下面打印输出使用flex的C代码的词法和令牌

%{ 
#include<stdio.h> 
char RW[] = "RESERVE_WORD"; 
%} 

int [i][n][t] 
%% 
int printf("%s --> %s\n", yylex(), RW); 
.|\n { /* Ignore all other */} 
%% 

int main(int argc, char *argv[]) { 
yyin = fopen(argv[1], "r"); 
yylex(); 
fclose(yyin); 
return 0; 
} 

当我做出一个词法分析这个函数yylex()函数返回“空”,它说

example5.l:8:1: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]. 

我会很高兴,如果你可以帮助我。并且无论如何感谢

+0

其实不,警告来自编译扫描仪。你似乎对如何使用yylex()有一个很大的误解,通过查看精细的手册可以解决这个问题:-)。你的输入和预期输出是什么? – 2012-03-04 01:45:24

+0

你是真的。我处理它。我意识到yylex()返回一个整数,所以有yytext变量包括最后一个标记作为一个字符串。并感谢您的回应 – quartaela 2012-03-04 12:35:53

+0

请问您是否可以通过工作代码发布答案,以便其他人可以看到您如何解决问题? – 2012-03-04 17:11:12

回答

0

好的我处理了这个问题。因此,我们应该使用yytext变量,它包含词法分析器的最后一个标记作为字符串。另外,yylex()函数将返回下一个标记的值或指示EOF的数字< = 0。

+1

不完全正确:yylex()将返回下一个标记的值或指示EOF的数字<= 0。 – 2012-03-04 23:01:25

+0

好的,然后我会编辑我的答案,并感谢您的警告。 – quartaela 2012-03-05 00:35:30