ファイルを解析するためにLex
ファイルとYACC
ファイル(.l
ファイルと.y
ファイル)があります。
これらのファイルをコンパイルする方法と、Windowsプラットフォームでそれらに対応する.c
ファイルを作成する方法は?
今日(2011-04-05、2017-11-29更新)に関しては、最新バージョンが必要です:
その後、好みのディレクトリで名前にスペースを入れずにフルインストールします。 C:\GnuWin32
をお勧めします。 notをdefault(C:\ Program Files(x86)\ GnuWin32)にインストールしてくださいbisonには、括弧ではなく、ディレクトリ名のスペースに問題があります。
また、 Dev-CPP をデフォルトのディレクトリ(C:\Dev-Cpp
)にインストールすることを検討してください
その後、PATH変数を設定して、gcc
(C:\Dev-Cpp\bin
)およびflex\bison
(C:\GnuWin32\bin
)のbinディレクトリを含めます。これを行うには、これをコピーします:;C:\Dev-Cpp\bin;C:\GnuWin32\bin
と、この図に示されている場所で定義されているPATH
変数の最後に追加します。
図の解像度が低い場合は、 ステップバイステップ が表示されます。
プロンプトを開き、「。l」と「.y」があるディレクトリにcdして、次のコマンドでコンパイルします。
flex hello.l
bison -dy hello.y
gcc Lex.yy.c y.tab.c -o hello.exe
プログラムを実行できるようになります。簡単なテスト(悪名高いHello World
)のソースを作成しました:
%{
#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
ハッピーハッキング。
あなたが(おそらく)望んでいるのは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のライセンスには「無料」として認められる十分な制限がありません。
ここにはWindows用のflexとbisonのポートがあります: http://gnuwin32.sourceforge.net/
Flexとbisonの最新のWindowsバージョンは、次の場所にあります。 http://sourceforge.net/projects/winflexbison/
Cygwin が常にあります。
また、WinFlexBisonは Chocolateyパッケージマネージャー の パッケージ化 であることに注意してください。それをインストールしてから行ってください:
choco install winflexbison
...執筆時点では、Bison 2.7およびFlex 2.6.3が含まれています。
もあります winflexbison3
(執筆時点で)Bison 3.0.4とFlex 2.6.3があります。
Windows用Git(Unixツールを使用) の完全インストールに進み、bison
およびflex
がbin
フォルダーに付属します。
私は同じ問題を抱えていた、それは非常に簡単な解決策を持っています。
「Lex」プログラムを実行する手順:
最も簡単な方法は、cygwinをダウンロードしてインストールし、インストール中にgccおよびflexパッケージをダウンロードすることです。次に、たとえば、Lexファイルを実行します。 abc.l
私達は書く
フレックスabc.l
gcc Lex.yy.c -o abc.exe
./abc.exe