Heloo EveryBody, 我有一个简单的lex语言代码,我尝试通过“bison -d hello.l”运行它,但我得到错误! 我收到以下错误。
有人能让我知道我错了吗?
bison -d hello.l
hello.l:4.1-5: syntax error, unexpected identifier
代码:
%{
#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();
}
答案 0 :(得分:1)
您正在尝试使用bison编译(f)lex输入文件。使用yylex或flex。
编辑:好的,还有其他问题(我试图编译你的代码):
规则必须从行的开头开始,没有 在他们面前的空白(删除开头的空格 第9,14行等。
在文件开头添加%option noyywrap
。
使用flex filename.l
编译文件。
然后编译生成的.c文件。您不需要额外的标题。