flex と bison を VC++で使いたいのですが…
-
エンジン
flex と bison を VC++で使いたいのですが…
早速ですが、本題に入らせていただきます。
今、私はスクリプトのエンジンを作りたく、書籍『スクリプトエンジンプログラミング』という本を購入しました。
一通り読んで、サンプルプログラムを動かそうとしたのですが、VC++でコンパイルエラーが出てしまいました。
サンプルプログラムは公式に載っています(http://www.sbcr.jp/products/4797347623. ... 4797347623)
VC++でのflexとbisonの設定はできているらしいので、flexとbisonにパスを通せばできると思ったのですが、上の通りダメでした。(flexとbisonはcygwinからインストールしました)
公式に問い合わせればと思いましたが、こちらに質問させていただきました。
誰かわかる方がいましたら、お願いします。
環境
VC++ : 2008 / 2010
cygwin : flex, bison
今、私はスクリプトのエンジンを作りたく、書籍『スクリプトエンジンプログラミング』という本を購入しました。
一通り読んで、サンプルプログラムを動かそうとしたのですが、VC++でコンパイルエラーが出てしまいました。
サンプルプログラムは公式に載っています(http://www.sbcr.jp/products/4797347623. ... 4797347623)
VC++でのflexとbisonの設定はできているらしいので、flexとbisonにパスを通せばできると思ったのですが、上の通りダメでした。(flexとbisonはcygwinからインストールしました)
公式に問い合わせればと思いましたが、こちらに質問させていただきました。
誰かわかる方がいましたら、お願いします。
環境
VC++ : 2008 / 2010
cygwin : flex, bison
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
P.S. サンプルプログラムですが、SampleSource\Bison-Flex\Compiler-StackBaseをやってみました。
Re: flex と bison を VC++で使いたいのですが…
と書いているのにエンジン さんが書きました:一通り読んで、サンプルプログラムを動かそうとしたのですが、VC++でコンパイルエラーが出てしまいました。
と判断する根拠は一体何でしょうか.文章を読む限り,VC++での設定ができていないように見えるのですが.エンジン さんが書きました:VC++でのflexとbisonの設定はできているらしい
それから,どんなコンパイルエラーが出ているのか僕たちには分かりませんので,エラーメッセージ全体を正確に貼り付けて下さい.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
私はVisualC++でflexとbisonを常用していますので使えないはずはありませんので、詳細なエラーを教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
すいません、ファイルの添付の仕方が解らなかったので、そのまま貼り付けます。
VC++の出力です。
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1>flexを実行しています。
1>bisonを実行しています。
1>cygwin warning:
1> MS-DOS style path detected: c:\SampleSource\Bison-Flex\Compiler-StackBase\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1>コンパイルしています...
1>compiler.cpp
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\compiler.cpp(42) : error C2664: 'yy::script_parser::script_parser(const yy::script_parser &)' : 1 番目の引数を 'compiler' から 'const yy::script_parser &' に変換できません。(新しい機能 ; ヘルプを参照)
1> 理由: 'compiler' から 'const yy::script_parser' へは変換できません。
1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
1>script-scanner.cc
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>script.cpp
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>コードを生成中...
1>ビルドログは "file://c:\SampleSource\Bison-Flex\Compiler-StackBase\Debug\BuildLog.htm" に保存されました。
1>script - エラー 112、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
VC++の出力です。
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1>flexを実行しています。
1>bisonを実行しています。
1>cygwin warning:
1> MS-DOS style path detected: c:\SampleSource\Bison-Flex\Compiler-StackBase\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1>コンパイルしています...
1>compiler.cpp
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\compiler.cpp(42) : error C2664: 'yy::script_parser::script_parser(const yy::script_parser &)' : 1 番目の引数を 'compiler' から 'const yy::script_parser &' に変換できません。(新しい機能 ; ヘルプを参照)
1> 理由: 'compiler' から 'const yy::script_parser' へは変換できません。
1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
1>script-scanner.cc
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>script.cpp
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(33) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(35) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(36) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(37) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(40) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(41) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.yy(42) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(182) : error C2061: 構文エラー : 識別子 'compiler'
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C2143: 構文エラー : ';' が '&' の前にありません。
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\samplesource\bison-flex\compiler-stackbase\script-parser.hh(342) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>コードを生成中...
1>ビルドログは "file://c:\SampleSource\Bison-Flex\Compiler-StackBase\Debug\BuildLog.htm" に保存されました。
1>script - エラー 112、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
とは、VC++上でflexとbisonの定義ファイルにカスタムビルドステップ(コマンドライン、出力ファイル、追加の依存ファイル)が設定してあるということです。VC++でのflexとbisonの設定はできているらしい
また、本書には、サンプルには設定してある。と書いてありました。
まだ、曖昧でしたらご指摘ください。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
yacc/bisonはバージョンで動作が変わる場合があるので、script-parser.yyでどんなコードが出ているか見てみないと何とも言えません。なので貼りつけてもらえますか?
codeタグで囲ってC言語でお願いします。
codeタグで囲ってC言語でお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
script-parser.yyになります。
%skeleton "lalr1.cc"
%define "parser_class_name" "script_parser"
%defines
%{
#ifdef _MSC_VER
#pragma warning(disable: 4800)
#pragma warning(disable: 4267)
#endif
#include <string>
#include "node.h"
class compiler;
%}
%parse-param { compiler& driver }
%lex-param { compiler& driver }
%locations
%expect 1 /* if文で衝突が発生するので、1つの衝突は無視 */
%initial-action
{
// ロケーション初期化
@$.begin.filename = @$.end.filename = &driver.get_filename();
} ;
// %debug
%error-verbose
// Symbols.
%union
{
int ival;
std::string *sval;
int type;
CValueList *value_list;
CArgList *arglist;
CDeclList *decls;
CStateList *states;
CStatement *statement;
CArgDef *argdef;
CArgs *args;
CValueNode *value;
CNode *expr;
CAssign *assign;
CStateBlock *block;
}
%{
#include "compiler.h"
%}
%token END_OF_FILE 0 "end of file"
%token <ival> TK_IVAL "ival"
%token <sval> TK_IDENTIFIER "identifier"
%token <sval> TK_SVAL "sval"
%token TK_LOGOR "||"
%token TK_LOGAND "&&"
%token TK_EQ "=="
%token TK_NE "!="
%token TK_GE ">="
%token TK_LE "<="
%token TK_LSHIFT "<<"
%token TK_RSHIFT ">>"
%token TK_ADD_ASSIGN "+="
%token TK_SUB_ASSIGN "-="
%token TK_MUL_ASSIGN "*="
%token TK_DIV_ASSIGN "/="
%token TK_MOD_ASSIGN "%="
%token TK_IF "if"
%token TK_ELSE "else"
%token TK_WHILE "while"
%token TK_FOR "for"
%token TK_SWITCH "switch"
%token TK_CASE "case"
%token TK_DEFAULT "default"
%token TK_BREAK "break"
%token TK_RETURN "return"
%token TK_INTEGER "int"
%token TK_STRING "string"
%token TK_VOID "void"
%type <expr> expr
%type <value> value
%type <assign> assign
%type <value_list> value_list
%type <arglist> arglist
%type <argdef> arg
%type <decls> decls decl_list
%type <states> states state_list
%type <block> block
%type <args> args
%type <statement> statement
%type <type> type
%destructor { delete $$; } "identifier"
%destructor { delete $$; } "sval"
%destructor { delete $$; } value_list
%destructor { delete $$; } arglist
%destructor { delete $$; } arg
%destructor { delete $$; } decls decl_list
%destructor { delete $$; } states state_list
%destructor { delete $$; } args
%destructor { delete $$; } block
%destructor { delete $$; } assign
%destructor { delete $$; } statement
%destructor { delete $$; } value
%destructor { delete $$; } expr
%left "||";
%left "&&";
%nonassoc "==" "!=" '>' '<' ">=" "<=";
%left '&' '|';
%left "<<" ">>";
%left '+' '-';
%left '*' '/' '%';
%left NEG;
%%
%start unit;
unit : define_or_state
| unit define_or_state
;
define_or_state : error ';'
| function
| declaration
;
declaration : type value_list ';' { driver.DefineValue(@2, $1, $2); }
| type "identifier" '(' ')' ';' { driver.DefineFunction(@2, $1, $2, NULL); }
| type "identifier" '(' arglist ')' ';' { driver.DefineFunction(@2, $1, $2, $4); }
| "void" "identifier" '(' ')' ';' { driver.DefineFunction(@2, TYPE_VOID, $2, NULL); }
| "void" "identifier" '(' arglist ')' ';' { driver.DefineFunction(@2, TYPE_VOID, $2, $4); }
;
value_list : value { $$ = new CValueList($1); }
| value_list ',' value { $$ = $1->Add($3); }
;
arglist : arg { $$ = new CArgList($1); }
| arglist ',' arg { $$ = $1->Add($3); }
;
arg : type { $$ = new CArgDef(@1, $1, NULL); }
| type '&' { $$ = new CArgDef(@1, TypeToRef($1), NULL); }
| type "identifier" { $$ = new CArgDef(@1, $1, $2); }
| type '&' "identifier" { $$ = new CArgDef(@1, TypeToRef($1), $3); }
| type "identifier" '[' ']' { $$ = new CArgDef(@1, TypeToRef($1), $2); }
| type '&' "identifier" '[' ']' { $$ = new CArgDef(@1, TypeToRef($1), $3); }
;
function : type "identifier" '(' ')' block { driver.AddFunction(@1, $1, $2, NULL, $5); }
| type "identifier" '(' arglist ')' block { driver.AddFunction(@1, $1, $2, $4, $6); }
| "void" "identifier" '(' ')' block { driver.AddFunction(@1, TYPE_VOID, $2, NULL, $5); }
| "void" "identifier" '(' arglist ')' block { driver.AddFunction(@1, TYPE_VOID, $2, $4, $6); }
;
type : "int" { $$ = TYPE_INTEGER; }
| "string" { $$ = TYPE_STRING; }
;
block : '{' decl_list state_list '}' { $$ = new CStateBlock($2, $3); }
;
decl_list : { $$ = NULL }
| decls { $$ = $1 }
;
state_list : { $$ = NULL }
| states { $$ = $1 }
;
decls : type value_list ';' { $$ = new CDeclList(new CDecl($1, $2)); }
| decls type value_list ';' { $$ = $1->Add(new CDecl($2, $3)); }
;
states : statement { $$ = new CStateList($1); }
| states statement { $$ = $1->Add($2); }
;
statement : ';' { $$ = new CNopStatement(@1); }
| assign ';' { $$ = new CAssignStatement(@1, $1); }
| "identifier" '(' args ')' ';' { $$ = new CFunctionStatement(@1, $1, $3); }
| "identifier" '(' ')' ';' { $$ = new CFunctionStatement(@1, $1, NULL); }
| "case" expr ':' { $$ = new CCaseStatement(@1, $2); }
| "default" ':' { $$ = new CDefaultStatement(@1); }
| "break" ';' { $$ = new CBreakStatement(@1); }
| "return" ';' { $$ = new CReturnStatement(@1, NULL); }
| "return" expr ';' { $$ = new CReturnStatement(@1, $2); }
| "if" '(' expr ')' statement { $$ = new CIfStatement(@1, $3, $5); }
| "if" '(' expr ')' statement "else" statement { $$ = new CIfStatement(@1, $3, $5, $7); }
| "for" '(' assign ';' expr ';' assign ')' statement
{ $$ = new CForStatement(@1, $3, $5, $7, $9); }
| "while" '(' expr ')' statement { $$ = new CWhileStatement(@1, $3, $5); }
| "switch" '(' expr ')' '{' state_list '}' { $$ = new CSwitchStatement(@1, $3, $6); }
| block { $$ = new CBlockStatement(@1, $1); }
;
assign : value '=' expr { $$ = new CAssign(@1, '=', $1, $3); }
| value "+=" expr { $$ = new CAssign(@1, '+', $1, $3); }
| value "-=" expr { $$ = new CAssign(@1, '-', $1, $3); }
| value "*=" expr { $$ = new CAssign(@1, '*', $1, $3); }
| value "/=" expr { $$ = new CAssign(@1, '/', $1, $3); }
| value "%=" expr { $$ = new CAssign(@1, '%', $1, $3); }
;
expr : expr "&&" expr { $$ = CNode::MakeNode(driver, @2, OP_LOGAND, $1, $3); }
| expr "||" expr { $$ = CNode::MakeNode(driver, @2, OP_LOGOR, $1, $3); }
| expr "==" expr { $$ = CNode::MakeNode(driver, @2, OP_EQ, $1, $3); }
| expr "!=" expr { $$ = CNode::MakeNode(driver, @2, OP_NE, $1, $3); }
| expr '>' expr { $$ = CNode::MakeNode(driver, @2, OP_GT, $1, $3); }
| expr ">=" expr { $$ = CNode::MakeNode(driver, @2, OP_GE, $1, $3); }
| expr '<' expr { $$ = CNode::MakeNode(driver, @2, OP_LT, $1, $3); }
| expr "<=" expr { $$ = CNode::MakeNode(driver, @2, OP_LE, $1, $3); }
| expr '&' expr { $$ = CNode::MakeNode(driver, @2, OP_AND, $1, $3); }
| expr '|' expr { $$ = CNode::MakeNode(driver, @2, OP_OR, $1, $3); }
| expr "<<" expr { $$ = CNode::MakeNode(driver, @2, OP_LSHIFT, $1, $3); }
| expr ">>" expr { $$ = CNode::MakeNode(driver, @2, OP_RSHIFT, $1, $3); }
| expr '-' expr { $$ = CNode::MakeNode(driver, @2, OP_MINUS, $1, $3); }
| expr '+' expr { $$ = CNode::MakeNode(driver, @2, OP_PLUS, $1, $3); }
| expr '*' expr { $$ = CNode::MakeNode(driver, @2, OP_TIMES, $1, $3); }
| expr '/' expr { $$ = CNode::MakeNode(driver, @2, OP_DIVIDE, $1, $3); }
| expr '%' expr { $$ = CNode::MakeNode(driver, @2, OP_MOD, $1, $3); }
| '-' expr %prec NEG { $$ = CNode::MakeNode(driver, @2, OP_NEG, $2); }
| '(' expr ')' { $$ = $2; }
| value { $$ = $1; }
| "ival" { $$ = new CNode(@1, OP_CONST, $1); }
| "sval" { $$ = new CNode(@1, OP_STRING, $1); }
| "identifier" '(' args ')' { $$ = new CFunctionNode(@1, $1, $3); }
| "identifier" '(' ')' { $$ = new CFunctionNode(@1, $1, NULL); }
;
value : "identifier" { $$ = new CValueNode(@1, $1); }
| "identifier" '[' expr ']' { $$ = new CValueNode(@1, $1, $3); }
;
args : expr { $$ = new CArgs($1); }
| args ',' expr { $$ = $1->Add($3); }
;
%%
void yy::script_parser::error(const yy::script_parser::location_type& l, const std::string& m)
{
driver.error(l, m);
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
ん?
よく考えてみたら拡張子yyはbisonへの入力ファイルですよね。
これが、そのままVisualC++のコンパイル対象となっているの何かの間違いだと思いますが・・・。
コンパイル対象となるのは
script-scanner.cc
script-parser.cc
の2つです。
script-parser.yy
をコンパイルすることはありません。
よく考えてみたら拡張子yyはbisonへの入力ファイルですよね。
これが、そのままVisualC++のコンパイル対象となっているの何かの間違いだと思いますが・・・。
コンパイル対象となるのは
script-scanner.cc
script-parser.cc
の2つです。
script-parser.yy
をコンパイルすることはありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
私もそう思いました。softya(ソフト屋) さんが書きました:よく考えてみたら拡張子yyはbisonへの入力ファイルですよね。
これが、そのままVisualC++のコンパイル対象となっているの何かの間違いだと思いますが・・・。
定義ファイルはbisonへ入力しているのですが、compiler.cpp等のコンパイル中に定義ファイルがコンパイルされのがわかりませんでした。
VCのソリューションごとうpします。
http://www.dotup.org/uploda/www.dotup.o ... ar.html fb
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
ああっとこれですね。
#line 4 "c:\\Users\\softyasu\\Downloads\\Compiler-StackBase\\script-parser.yy"
これでccでコンパイルしても元のyyのソース行が表示されます。
CValueListが未定義のようでnode.h等がscript-parser.ccから見えない状態であるが原因だと思います。
#line 4 "c:\\Users\\softyasu\\Downloads\\Compiler-StackBase\\script-parser.yy"
これでccでコンパイルしても元のyyのソース行が表示されます。
CValueListが未定義のようでnode.h等がscript-parser.ccから見えない状態であるが原因だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
#line 4 "~~\\script-parser.yy"
とは、script-parser.yyのソースコードの4行目をここに記述という意味ですよね??
script-parser.yyの4行目って %{ ですか??
すいません、どうすればいいのか解らなかったです。。
とは、script-parser.yyのソースコードの4行目をここに記述という意味ですよね??
script-parser.yyの4行目って %{ ですか??
すいません、どうすればいいのか解らなかったです。。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
すいません書き方が悪かったですね。#lineはコンパイラに対して実際にコンパイルしているのはscript-parser.ccってソースだけれどもここからはscript-parser.yyの4行目以降だという事にしてコンパイルエラーとかデバッグ情報を出して下さいと言うコンパイラへの命令です。つまり、script-parser.ccをコンパイルしてもエラーメッセージは元のscript-parser.yyの行番号が出るための仕組みって事ですね。
インクルード機能のある中間言語インタプリタやコンパイラを作る時は必要な仕組みですので覚えておいて下さい。
インクルード機能のある中間言語インタプリタやコンパイラを作る時は必要な仕組みですので覚えておいて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
なるほど!
(一応)#line 行番号 "ファイル名"については理解することができました!
元のソースコードには何も影響を及ばさないんですよね?
script-parser.ccの45行目に#include"node.h"がありますが、それでもダメなのでしょうか?
(一応)#line 行番号 "ファイル名"については理解することができました!
元のソースコードには何も影響を及ばさないんですよね?
script-parser.ccの45行目に#include"node.h"がありますが、それでもダメなのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
こっちも勘違いしてました。
script-parser.ccからnode.hが見えますがscript-parser.hhからはnode.hが見えませんね。
つじつま合わせをお願いします。
script-parser.ccからnode.hが見えますがscript-parser.hhからはnode.hが見えませんね。
つじつま合わせをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
compiler.hの9行目に#include "node.h"を追記することで、コンパイルエラーは除去されました!
ただ、linkのほうでエラーがでましたが解りますか??
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1>flexを実行しています。
1>bisonを実行しています。
1>cygwin warning:
1> MS-DOS style path detected: c:\SampleSource\Bison-Flex\Compiler-StackBase\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1>コンパイルしています...
1>compiler.cpp
1>node.cpp
1>script-scanner.cc
1>script.cpp
1>vm.cpp
1>コードを生成中...
1>コンパイルしています...
1>script-parser.cc
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>link: extra operand `/ERRORREPORT:PROMPT'
1>Try `link --help' for more information.
1>プロジェクト : error PRJ0002 : エラーの結果 1 が 'C:\cygwin\bin\link.exe' より返されました。
1>ビルドログは "file://c:\SampleSource\Bison-Flex\Compiler-StackBase\Debug\BuildLog.htm" に保存されました。
1>script - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ただ、linkのほうでエラーがでましたが解りますか??
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1>flexを実行しています。
1>bisonを実行しています。
1>cygwin warning:
1> MS-DOS style path detected: c:\SampleSource\Bison-Flex\Compiler-StackBase\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1>コンパイルしています...
1>compiler.cpp
1>node.cpp
1>script-scanner.cc
1>script.cpp
1>vm.cpp
1>コードを生成中...
1>コンパイルしています...
1>script-parser.cc
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>link: extra operand `/ERRORREPORT:PROMPT'
1>Try `link --help' for more information.
1>プロジェクト : error PRJ0002 : エラーの結果 1 が 'C:\cygwin\bin\link.exe' より返されました。
1>ビルドログは "file://c:\SampleSource\Bison-Flex\Compiler-StackBase\Debug\BuildLog.htm" に保存されました。
1>script - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
リンカ(link.exe)がVisualC++のものではなくcygwinの物が動作しているようです。
VisualC++の設定でcygwinの方の順位を下げた方が良いと思います。
VisualC++の設定でcygwinの方の順位を下げた方が良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
おぉ、優先順位を下げたところ、無事にビルドを完了することができました! 有り難うございます!
申し訳ありませんが、もう1つだけ質問していいでしょうか?
このソリューションをVC++2010に変換してビルドしたところまたリンカー部分でエラーが発生したのですが、
これも、優先順位の問題なのでしょうか??(見た感じVC++かなとは思うのですが……)
そうだとしたら、VC++2010で優先順位の下げ方を教えてもらえたらなと思います。
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1> bison?????????
1>CUSTOMBUILD : cygwin warning :
1> MS-DOS style path detected: C:\SampleSource\Bison-Flex\Compiler-StackBase2\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase2/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1> flex?????????
1> vm.cpp
1> script.cpp
1> script-scanner.cc
1> node.cpp
1> compiler.cpp
1> コードを生成中...
1> script-parser.cc
1> /usr/bin/link: cannot create link `\377\376/' to `/ERRORREPORT:PROMPT': No such file or directory
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error MSB6006: "link.exe" はコード 1 を伴って終了しました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
申し訳ありませんが、もう1つだけ質問していいでしょうか?
このソリューションをVC++2010に変換してビルドしたところまたリンカー部分でエラーが発生したのですが、
これも、優先順位の問題なのでしょうか??(見た感じVC++かなとは思うのですが……)
そうだとしたら、VC++2010で優先順位の下げ方を教えてもらえたらなと思います。
1>------ ビルド開始: プロジェクト: script, 構成: Debug Win32 ------
1> bison?????????
1>CUSTOMBUILD : cygwin warning :
1> MS-DOS style path detected: C:\SampleSource\Bison-Flex\Compiler-StackBase2\script-parser.yy
1> Preferred POSIX equivalent is: /cygdrive/c/SampleSource/Bison-Flex/Compiler-StackBase2/script-parser.yy
1> CYGWIN environment variable option "nodosfilewarning" turns off this warning.
1> Consult the user's guide for more details about POSIX paths:
1> http://cygwin.com/cygwin-ug-net/using.h ... -pathnames
1> flex?????????
1> vm.cpp
1> script.cpp
1> script-scanner.cc
1> node.cpp
1> compiler.cpp
1> コードを生成中...
1> script-parser.cc
1> /usr/bin/link: cannot create link `\377\376/' to `/ERRORREPORT:PROMPT': No such file or directory
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error MSB6006: "link.exe" はコード 1 を伴って終了しました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
申し訳ないですがVisualC++2010は詳しくないので。
同じ方法で下げれませんか?
同じ方法で下げれませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
2008では、オプション->VC++ディレクトリ で 実行ファイル(flex,bison)のパスを通す時に、vcのパスより下に記述することでできましたが、
2010では、vcのパスの上にしか記述することができませんでした。
すいません、これで伝わりますか?
2010では、vcのパスの上にしか記述することができませんでした。
すいません、これで伝わりますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: flex と bison を VC++で使いたいのですが…
それだと更に上にVC++のパスを書くぐらいしか手が無いですね。つまり本来のと同じものを2重に登録します。
そんな馬鹿な方法しか出来ないのかと言う疑問がありますが手元でVC++2010Expressが動かないので検証しようがないです。
あとは、cygwinのフォルダから別フォルダにbisonとyaccflexを独立させてlinkが混じり込まないようするとか。 ← 間違い訂正。
そんな馬鹿な方法しか出来ないのかと言う疑問がありますが手元でVC++2010Expressが動かないので検証しようがないです。
あとは、cygwinのフォルダから別フォルダにbisonとyaccflexを独立させてlinkが混じり込まないようするとか。 ← 間違い訂正。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
そうですか、わかりました!
今回はbisonとflexを抜き出す形で行きたいと思います。
これで解決とさせていただきます。
忙しい中、大変有り難うございました!!
今回はbisonとflexを抜き出す形で行きたいと思います。
これで解決とさせていただきます。
忙しい中、大変有り難うございました!!
Re: flex と bison を VC++で使いたいのですが…
VC++2010で、ディレクトリ設定はプロパティシートを使います。
ソリューションエクスプローラペインをプロパティマネージャーに切り替えてください。
ソリューションを変換したなら変換された内容の記録されたプロパティシートが追加されているのではないかと思います。
上にあるものほど優先順位が高くなります。
ちなみにExpressだと上級者用の設定にしないとプロパティマネージャが表示されません。
ソリューションエクスプローラペインをプロパティマネージャーに切り替えてください。
ソリューションを変換したなら変換された内容の記録されたプロパティシートが追加されているのではないかと思います。
上にあるものほど優先順位が高くなります。
ちなみにExpressだと上級者用の設定にしないとプロパティマネージャが表示されません。
-
エンジン
Re: flex と bison を VC++で使いたいのですが…
参考になりました!ISLe さんが書きました:VC++2010で、ディレクトリ設定はプロパティシートを使います。
ソリューションエクスプローラペインをプロパティマネージャーに切り替えてください。
ソリューションを変換したなら変換された内容の記録されたプロパティシートが追加されているのではないかと思います。
上にあるものほど優先順位が高くなります。
ちなみにExpressだと上級者用の設定にしないとプロパティマネージャが表示されません。
有り難うございます!