図120103
VisualC++の空のプロジェクトを作成します。
図120204
基本プロジェクトができたら、もう一つプロジェクトを作成します。
図120205
こちらも空のプロジェクトとし、名前はFlexBisonとします。
図120206
2つのプロジェクトを作成したら、構成マネージャを開きます。
図120207
まずアクティブソリューションプラットフォームの編集を選択します。
図020208
x64を削除します。今回は32ビットアプリケーションとして作成するので、間違ってx64が選択されないようにします。
図120209
続いて中段のCLangProjectのプラットフォームも編集します。
図020210
x64を削除します。
図120211
続いてFlexBisonも編集します。
図120212
x64を削除します。
図120213
先ほどダウンロードしたwinflexbison3-latest.zipを解凍しwinflexbisonとディレクトリ名を変更して、以下の様な構造でFlexBisonプロジェクト内にコピーします。
図020214
FlexBisonプロジェクトのビルドのカスタマイズを選択します。
図120215
カスタマイズの画面で既存ファイルの検索を選びます。
図120216
ローカルのディレクトリから、FlexBisonプロジェクト内の、先ほどコピーしたwinflexbison内のcustom_build_rules内のwin_flex_bisonを選択し、win_flex_bison_custom_build.targetsを選択します。
図120217
このまま設定するかどうか警告が出ますがはいで設定します。すると、以下のようにチェックできるように表示されますので、チェックし、OKをクリックします。
図120218
続いてFlexBisonプロジェクトのプロパティを選択します。
図120219
VC++ディレクトリの実行可能ファイルディレクトリの編集を選びます。
図120220
そこで$(ProjectDir)winflexbisonと記述しOKを選びます。
図120221
FlexBisonプロジェクトのソースファイルに新しい項目を追加します。
図120222
C++ファイルを選んで。CLangProject.l(拡張子はエルです)というファイルを追加します。
図120223
コードの編集画面が出たら、以下を記述します。
%{
#include <stdio.h>
#include "CLangProject.tab.h"
#define YY_SKIP_YYWRAP 1
int
yywrap(void)
{
return 1;
}
%}
%%
"+" return ADD;
"-" return SUB;
"*" return MUL;
"/" return DIV;
"\n" return CR;
[1-9][0-9]* {
double temp;
sscanf(yytext, "%lf", &temp);
yylval.double_value = temp;
return DOUBLE_LITERAL;
}
[0-9]*\.[0-9]* {
double temp;
sscanf(yytext, "%lf", &temp);
yylval.double_value = temp;
return DOUBLE_LITERAL;
}
[ \t] ;
%%
図120224
ファイルを作成したら、以下を記述します。
%{ #include <stdio.h> #include <stdlib.h> #define YYDEBUG 1 extern int yylex(void); int yyerror(char const *str) { extern char *yytext; fprintf(stderr, "parser error near %s\n", yytext); return 0; } %} %union { int int_value; double double_value; } %token <double_value> DOUBLE_LITERAL %token ADD SUB MUL DIV CR %type <double_value> expression term primary_expression %% line_list : line | line_list line ; line : expression CR { printf(">>%lf\n", $1); } expression : term | expression ADD term { $$ = $1 + $3; } | expression SUB term { $$ = $1 - $3; } ; term : primary_expression | term MUL primary_expression { $$ = $1 * $3; } | term DIV primary_expression { $$ = $1 / $3; } ; primary_expression : DOUBLE_LITERAL ; %% int main(void) { extern int yyparse(void); extern FILE *yyin; yyin = stdin; if (yyparse()) { fprintf(stderr, "Error ! Error ! Error !\n"); exit(1); } }
図020225
また、FlexBisonプロジェクト内を見てみましょう。以下のようにCLangProject.tab.h、CLangProject.tab.cpp、CLangProject.flex.cppができていればOKです。
図120226
続いて、メインのプロジェクトであるCLangProjectにソースファイルを追加します。既存の項目で追加してください。
図120227
FlexBisonプロジェクト内のCLangProject.tab.cpp、CLangProject.flex.cppを追加します。
図120228
ヘッダーファイルも既存の項目を追加します。
図120229
FlexBisonプロジェクト内のCLangProject.tab.hを追加します。
図120230
メインのプロジェクトCLangProjectのプロパティを開きます。
図120231
詳細設定で指定の警告を無効にするを選び編集します。
図120232
4996と数字を記述します。これはセキュリティに問題がある関数scanfなどをビルドできないようになっている設定をなくすものです。
図120233
続いてoreProjectのプロパティでリンカ-システムのサブシステムにコンソールの設定をします。
図120234
1ソリューションのプロパティも設定します。
図120235
CLangProjectの依存関係をFlexBisonにチェックします。
図120236
さあ、すべてが整いました。ビルド-ソリューションのリビルドを行います。
図120237
CLangProject.exeが作成されすべてリビルド: 2 正常終了と出力されれば成功です。
図020238
10 + 35
10 + 35 >>45.000000
10 + 35 >>45.000000 34 * 23 >>782.000000 67 / 23 >>2.913043 984 - 34.5 >>949.500000
10 + 35 >>45.000000 34 * 23 >>782.000000 67 / 23 >>2.913043 984 - 34.5 >>949.500000 parser error near Error ! Error ! Error ! ....\CLangProject\Debug\CLangProject.exe (プロセス 9480) は、コード 1 を伴って終了しました。 このウィンドウを閉じるには、任意のキーを押してください . . .
このウィンドウを閉じるには、任意のキーを押してください . . .