1

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();
         }
4

1 回答 1

1

您正在尝试使用 bison 编译 (f)lex 输入文件。使用 yylex 或 flex。

编辑:好的,进一步的问题(我试图编译你的代码):

  1. 规则必须从行首开始,前面没有空格(删除第 9、14 行等开头的空格)。

  2. %option noyywrap在文件开头添加。

  3. 用 . 编译文件flex filename.l

  4. 然后编译生成的 .c 文件。您不需要额外的标题。

于 2012-11-11T14:01:35.870 回答