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を使用します。

編集:OK、さらなる問題(私はあなたのコードをコンパイルしようとしました):

  1. ルールは行の先頭から開始する必要があり、その前に空白を入れないでください(9、14行目などの先頭の空白を削除してください)。

  2. %option noyywrapファイルの先頭に追加します。

  3. を使用してファイルをコンパイルしますflex filename.l

  4. 次に、生成された.cファイルをコンパイルします。追加のヘッダーは必要ありません。

于 2012-11-11T14:01:35.870 に答える