2016-09-28 1 views
1

コンパイル私が得るサンプルRecognizing integers: the sentinel methodを(re2cのを使用して処理する):構文エラー「*」

re2c : error : line 16, column 9: syntax error 

それは「*」文句ているように見えます。以下は、(ライン16上のコメントなしを除く)私の01_recognizing_integers.reファイルです:

#include <stdio.h> 

static const char *lex(const char *YYCURSOR) 
{ 
    const char *YYMARKER; 
    /*!re2c 
     re2c:define:YYCTYPE = char; 
     re2c:yyfill:enable = 0; 

     end = "\x00"; 
     bin = '0b' [01]+; 
     oct = "0" [0-7]*; 
     dec = [1-9][0-9]*; 
     hex = '0x' [0-9a-fA-F]+; 

     *  { return "err"; }  // line 16 
     bin end { return "bin"; } 
     oct end { return "oct"; } 
     dec end { return "dec"; } 
     hex end { return "hex"; } 
    */ 
} 

int main(int argc, char **argv) 
{ 
    for (int i = 1; i < argc; ++i) { 
     printf ("%s: %s\n", lex(argv[i]), argv[i]); 
    } 
    return 0; 
} 

私はアスタリスクでその行を削除した場合、エラーがない、出力が生成され、コンパイラはそれとコンパイルプログラムは動作します(私はテストからエラーサンプルを削除しました)。サンプルは間違っていますか?意図したとおりに動作させるにはどうすればよいですか?

+0

はなぜダウン票を得たのですか?何が間違っているのか分からなければ、将来の問題を改善することはできません。 – user34660

+0

エラーを送信するときは、詳細(プラットフォーム、プログラムのバージョン、プログラムの呼び出し方法、正確なエラーメッセージなど)を常に提供する必要があります。このように人々は助けてくれるでしょう。私がダウン投票したのは私ではなかったことに注意してください。 – skvadrik

+0

ありがとう、@skvadrik。私はあなたがあなたではないと信じています。あなたの説明が助けになります。私が誰かのために投票していることが疑わしいと言いたい。私はそれが起こっているかどうかは確かではありません。 – user34660

答えて

2

どのようなre2cバージョンがありますか?

re2c-0.13.7以上が必要です(re2c-0.13.7.5は0.13.xシリーズの安定版です)。

re2c-0.16は最新の安定版です。古いre2cのバージョンの場合

、代わりに*[^]を使用し、これを読んで:http://re2c.org/manual/warnings/undefined_control_flow/wundefined_control_flow.html#difference-between-and

+0

はい、それは私が0.13.5を超えるバージョンのビルドされたバージョンを見つけることができないことを除いて、それでした。私はPHPを構築するために提供されているexeファイルを使用していました。私は彼らがre2cサンプルページに0.13.7以上が必要であると言っているノートを追加すべきだと思います。私は "[*]"を使用し、それは古いバージョンで動作します。 – user34660

+1

Windowsの場合、re2cをビルドする最も良い方法は、CygwinまたはMingwを使用することです。http://re2c.org/install/install.html#windowshttp://re2c.org/install/install.html#windows 。 MSVCビルドは現在サポートされていません。 – skvadrik