[解決済み] WindowsでLEX/YACCファイルをコンパイルするには?
質問
私は、次のような問題を抱えています。
Lex
と
YACC
ファイルを使用して、私のファイルをパースします (
.l
ファイルと
.y
ファイル)を作成します。
それらのファイルをどのようにコンパイルし、どのように同等の
.c
のファイルを作成することはできますか?
解決方法は?
本日(2011-04-05、2017-11-29更新)時点では、以下の最新版が必要です。
-
その後、お好みのディレクトリにフルインストールします。 名前にスペースがない場合 . 私のお勧めは
C:\GnuWin32
. する ない にインストールします。 デフォルト (C:\Program Files (x86)\GnuWin32) なぜなら bison は括弧はともかく、ディレクトリ名のスペースに問題があるからです。 -
また、以下のインストールもご検討ください。 デブCPP をデフォルトのディレクトリ (
C:\Dev-Cpp
) -
その後、PATH変数に、以下のbinディレクトリが含まれるように設定します。
gcc
はC:\Dev-Cpp\bin
) とflex\bison
はC:\GnuWin32\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); }
;
編集: "warning: yyerror と yylex の暗黙の定義" を避けました。
免責事項:この回答は非常に古い(2011年以降!)ので、バージョンや機能の変更によって問題に遭遇した場合、新しいitensを反映するためにこの回答を更新することができないので、もっと調査が必要かもしれないことを思い出してください。この回答があなたにとって良い入口になることを願っています。
アップデート:何か(本当に小さな変更)が必要な場合は、githubの公式リポジトリをチェックしてください。 https://github.com/drbeco/hellex
ハッキングを楽しんでください。
関連
-
[解決済み】exec: "gcc": go buildしようとすると%PATH%に実行可能ファイルが見つからない
-
[解決済み] NERDTreeで隠しファイル(ピリオドで始まる)を表示するにはどうしたらいいですか?
-
[解決済み] Windowsのバッチスクリプトにおける"@"の意味について
-
[解決済み] CMDでPowerShellを実行する方法
-
[解決済み] Windows 7 - 'make'が内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されない
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] Windowsのコマンドラインに'which'に相当するものはありますか?
-
[解決済み] Git for Windows でファイル名が長すぎる
-
[解決済み] N日以上前のファイルを削除するバッチファイル
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UnicodeDecodeError: 'charmap' コーデックは、位置YのバイトXをデコードできません:文字は<undefined>にマップされます。
-
[解決済み] openssl' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] .batファイルのアイコンをプログラムで変更するには?
-
[解決済み] npm windows install globallyでnpm ERR!余計なお世話になる。
-
[解決済み] 旧バージョンのRubyを削除する(Windowsの場合)
-
[解決済み] vbscriptのコンソールへの出力
-
[解決済み] Autohotkey Controlsendコマンドを理解する
-
[解決済み] Windowsネイティブアプリケーションを作るには?[クローズド]
-
[解決済み] Windows (10)にPythonがインストールされているかどうかをテストし、インストールされていない場合はexeを実行してインストールするにはどうすればよいですか?
-
[解決済み] セットの/pはどういう意味ですか?