Bison 这个简单的Lex示例有什么问题?
大家好, 我用lex语言编写了一个简单的代码,我试着用“bison-d hello.l”运行它,但我发现了一个错误! 我得到以下错误 有人能告诉我我错了什么吗Bison 这个简单的Lex示例有什么问题?,bison,lex,Bison,Lex,大家好, 我用lex语言编写了一个简单的代码,我试着用“bison-d hello.l”运行它,但我发现了一个错误! 我得到以下错误 有人能告诉我我错了什么吗 bison -d hello.l hello.l:4.1-5: syntax error, unexpected identifier 代码: %{ #包括 %} 数字[0-9] ID[a-z][a-z0-9]* %% {数字}+{ printf(“一个整数:%s(%d)\n”),yytext, 原子能机构(文本); } {DIGIT
bison -d hello.l
hello.l:4.1-5: syntax error, unexpected identifier
代码:
%{
#包括
%}
数字[0-9]
ID[a-z][a-z0-9]*
%%
{数字}+{
printf(“一个整数:%s(%d)\n”),yytext,
原子能机构(文本);
}
{DIGIT}+“{DIGIT}*{
printf(“浮点数:%s(%g)\n”),yytext,
atof(yytext));
}
如果|那么|开始|结束|过程|函数{
printf(“关键字:%s\n”,yytext);
}
{ID}printf(“标识符:%s\n”,yytext);
“+”|“-“|”*“|”/”printf(“运算符:%s\n”,yytext);
“{”[\^{}}\n]*“}”/*吃光一行注释*/
[\t\n]+/*吃光空白*/
. printf(“无法识别的字符:%s\n”,yytext);
%%
int main(int argc,字符**argv)
{
++argv,--argc;/*跳过程序名*/
如果(argc>0)
yyin=fopen(argv[0],“r”);
其他的
yyin=stdin;
yylex();
}
您正试图用bison编译(f)lex输入文件。使用yylex或flex
编辑:好的,进一步的问题(我试图编译你的代码):
%选项noyywrap
flex filename.l
编译文件我使用bison生成CONST.H文件!因为当我想编译lex.yy.c文件时,我会遇到一些错误,比如“未声明(首次在此函数中使用)”!当我在网上搜索时,我知道我需要一个Const.h文件,所以我想生成那个文件。如何做到这一点?如果知道哪些是未声明的,那将非常有帮助。9 C:\Users\Majid\Desktop\F\hello.l`DIGIT'未声明(首次使用此函数)我发现这篇文章和我的文章一样。请帮助我如何生成包含windows中定义的“y.tab.h”?我想您发布的示例就是flex手册中的示例。我仍然不明白你到底做了什么,哪个命令给出了哪个错误。如果不使用bison,则不需要y.tab.h文件。
%{
#include <math.h>
%}
DIGIT [0-9]
ID [a-z][a-z0-9]*
%%
{DIGIT}+ {
printf( "An integer: %s (%d)\n", yytext,
atoi( yytext ) );
}
{DIGIT}+"."{DIGIT}* {
printf( "A float: %s (%g)\n", yytext,
atof( yytext ) );
}
if|then|begin|end|procedure|function {
printf( "A keyword: %s\n", yytext );
}
{ID} printf( "An identifier: %s\n", yytext );
"+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext );
"{"[\^{}}\n]*"}" /* eat up one-line comments */
[ \t\n]+ /* eat up whitespace */
. printf( "Unrecognized character: %s\n", yytext );
%%
int main( int argc, char **argv )
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
}