web-dev-qa-db-ja.com

WindowsでLex / YACCファイルをコンパイルする方法は?

ファイルを解析するためにLexファイルとYACCファイル(.lファイルと.yファイル)があります。

これらのファイルをコンパイルする方法と、Windowsプラットフォームでそれらに対応する.cファイルを作成する方法は?

51

今日(2011-04-05、2017-11-29更新)に関しては、最新バージョンが必要です:

  1. flex-2.5.4a-1.exe

  2. bison-2.4.1-setup.exe

  3. その後、好みのディレクトリで名前にスペースを入れずにフルインストールします。 C:\GnuWin32をお勧めします。 notdefault(C:\ Program Files(x86)\ GnuWin32)にインストールしてくださいbisonには、括弧ではなく、ディレクトリ名のスペースに問題があります。

  4. また、 Dev-CPP をデフォルトのディレクトリ(C:\Dev-Cpp)にインストールすることを検討してください

  5. その後、PATH変数を設定して、gccC:\Dev-Cpp\bin)およびflex\bisonC:\GnuWin32\bin)のbinディレクトリを含めます。これを行うには、これをコピーします:;C:\Dev-Cpp\bin;C:\GnuWin32\binと、この図に示されている場所で定義されているPATH変数の最後に追加します。
    step-by-step to set PATH variable under Win-7.
    図の解像度が低い場合は、 ステップバイステップ が表示されます。

  6. プロンプトを開き、「。l」と「.y」があるディレクトリにcdして、次のコマンドでコンパイルします。

    1. flex hello.l
    2. bison -dy hello.y
    3. gcc Lex.yy.c y.tab.c -o hello.exe

Commands to create lexical analyzer, parser and executable.

プログラムを実行できるようになります。簡単なテスト(悪名高いHello World)のソースを作成しました:

Hello.l

%{

#include "y.tab.h"
int yyerror(char *errormsg);

%}

%%

("hi"|"oi")"\n"       { return HI;  }
("tchau"|"bye")"\n"   { return BYE; }
.                     { yyerror("Unknown char");  }

%%

int main(void)
{
   yyparse();
   return 0;
}

int yywrap(void)
{
   return 0;
}

int yyerror(char *errormsg)
{
    fprintf(stderr, "%s\n", errormsg);
    exit(1);
}

こんにちは。

%{

#include <stdio.h>
#include <stdlib.h>
int yylex(void);
int yyerror(const char *s);

%}

%token HI BYE

%%

program: 
         hi bye
        ;

hi:     
        HI     { printf("Hello World\n");   }
        ;
bye:    
        BYE    { printf("Bye World\n"); exit(0); }
         ;

編集:「警告:yyerrorおよびyylexの暗黙的な定義」を回避。

免責事項:この回答は非常に古い(2011年以降)ことを忘れないでください。バージョンと機能の変更により問題が発生した場合は、この回答を更新して新しいアイテムを反映することができないため、さらに調査が必要になる場合があります。おかげで、これが多くの人にとってそうであったように、あなたにとって良いエントリーポイントになることを願っています。

更新:何か(本当に小さな変更)を行う必要がある場合は、githubの公式リポジトリを確認してください: https://github.com/drbeco/hellex

ハッピーハッキング。

96
Dr Beco

あなたが(おそらく)望んでいるのはFlex 2.5.4です(一部の人々は現在、それを「維持」し、 新しいバージョン を作成していますが、IMOは実際の欠点を修正するよりもそれを台無しにしています) byacc 1.9 (同様に)。 (2017-11-17の編集:Flex 2.5.4はSourceforgeでは使用できなくなり、Flex githubリポジトリは2.5.5にのみ戻ります。しかし、Gnuから取得できるようです。 ftpサーバー ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz 。)

必然的に推奨されるため、Bisonを使用してagainstに警告します。バイソンはもともと、後にByaccを書いたロバート・コーベットによって書かれました。彼は、自分が何をしていたのかを本当に知らなかった、または理解していなかったと公然と述べています。残念ながら、若くて愚かで、彼はGPLの下でそれをリリースし、今ではGPLファンはそれが本質的にベータテスト製品と考えられるべきであると言っているにもかかわらず、人生の病気への答えとしてそれをプッシュします-しかし、複雑なGPLファンの理由から、byaccのライセンスには「無料」として認められる十分な制限がありません。

11
Jerry Coffin

ここにはWindows用のflexとbisonのポートがあります: http://gnuwin32.sourceforge.net/

flex は、Lexの無料実装です。 bison はyaccの無料実装です。

9
lesmana

Flexとbisonの最新のWindowsバージョンは、次の場所にあります。 http://sourceforge.net/projects/winflexbison/

8
Lexxmark

Cygwin が常にあります。

7
Skurmedel

また、WinFlexBisonは Chocolateyパッケージマネージャーパッケージ化 であることに注意してください。それをインストールしてから行ってください:

choco install winflexbison

...執筆時点では、Bison 2.7およびFlex 2.6.3が含まれています。

もあります winflexbison3(執筆時点で)Bison 3.0.4とFlex 2.6.3があります。

3
Alastair Maw

Windows用Git(Unixツールを使用) の完全インストールに進み、bisonおよびflexbinフォルダーに付属します。

3
Archy Will He

私は同じ問題を抱えていた、それは非常に簡単な解決策を持っています。
「Lex」プログラムを実行する手順:

  1. ツール->「Lexファイルコンパイラ」
  2. ツール->「Lex Build」
  3. ツール->「CMDを開く」
  4. 次に、コマンドプロンプトで「name_of_file.exe」と入力しますexample-> '1.exe'
  5. 次に、入力全体を入力してCtrl + Zを押し、Enterを押します。

0
Amit

最も簡単な方法は、cygwinをダウンロードしてインストールし、インストール中にgccおよびflexパッケージをダウンロードすることです。次に、たとえば、Lexファイルを実行します。 abc.l

私達は書く

フレックスabc.l

gcc Lex.yy.c -o abc.exe

./abc.exe

0
aayush shah