K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1460] Re:質問
投稿者:(ぱ)こと管理人
2009/11/02 22:50:27

>crowbar.hを見ていると/*create.c*/や/*string.c*/などが書いてありました。 これですね。 http://kmaebashi.com/programmer/devlang/crowbar_src_0_4_02/S/6.html >これは、例えばcreate.cというファイルが、crowbar.hの/*create.c*/と書いてある以下の部分を使うということですか。 「以下の部分を使う」というのをどういう意味で書かれているのかはわかりませんが、 このコメントは、 「/* create.c */というコメントの下にある関数は、create.c内で定義されている」 ということを意味しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1459] 質問
投稿者:高校生
2009/11/02 10:51:03

crowbar.hを見ていると/*create.c*/や/*string.c*/などが書いてありました。 これは、例えばcreate.cというファイルが、crowbar.hの/*create.c*/と書いてある以下の部分を使うということですか。 気になりまして。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1458] Re:DIKSAM_book_0_4のMac/Winでの実行結果について(その2)
投稿者:(ぱ)こと管理人
2009/11/01 16:07:52

>私が問題にしているのは、Test.dkmの726行目 > if (str[i] == '本') { >の解釈で、WindowのCYGWINのGCCが作成した実行部は2バイト文字として >文字リテラルを解釈しているのに、MacのGCCで作成した実行部は文字リテラル数が >複数あるとしてエラーとしていることです。 まず、Diksamでは、"あいうえお".length()は5を返しますし、"あいうえお"[3]の 値は'え'である、というのが仕様です。つまり、Diksamでは、文字列は「バイトの 並び」ではなく「文字の並び」です。この「文字」は、日本語であっても、 1文字は1文字として解釈されなければなりません。 よって、実行に成功していれば、test.dkmにおける以下のコードの実行結果は、 string str = "日本語"; for (i = 0; i < str.length(); i++) { println("str[" + i + "].." + str[i]); if (str[i] == '本') { println("本"); } } 以下のようになるのが正解です。 str[0]..26085 str[1]..26412 本 str[2]..35486 ところが、青餓鬼さんの環境では、str.length()がEUCではが6, UTF-8では9に なっています。これはマルチバイト文字からUNICODEへの変換が行われておらず、 単にバイト列として読み込まれているように見えます。 マルチバイト文字からUNICODEへの変換処理はロケールに依存するので、 環境変数LANGの値はどうなっているのかが気になっているわけです。 とはいえ私はMacは持っておりませんしOS-Xを使ったこともないので、 見当はずれのことを書いている可能性はあります。詳しい方ご指摘ください。 過去MacOSで動かした人はいたはずだったよな、と思い掲示板の過去ログを 探したところ、以下の投稿が見つかりました。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1196&range=1 なぜか当時追及しなかったようなのですが、Windowsと同じようには動いていませんね。 この出力だけ見ると、ワイド文字に変換した結果がShift-JISになっているように 見えますが、いくらなんでもそんなはずは……
[この投稿を含むスレッドを表示] [この投稿を削除]
[1457] DIKSAM_book_0_4のMac/Winでの実行結果について(その2)
投稿者:青餓鬼
2009/10/31 16:43:49

私が問題にしているのは、Test.dkmの726行目 if (str[i] == '本') { の解釈で、WindowのCYGWINのGCCが作成した実行部は2バイト文字として文字リテラルを解釈しているのに、MacのGCCで作成した実行部は文字リテラル数が複数あるとしてエラーとしていることです。 文字リテラルに関しては、ほかの手段を執るか制限を設けるのか検討が必要だと思います。 以上
[この投稿を含むスレッドを表示] [この投稿を削除]
[1456] Re:質問
投稿者:(ぱ)こと管理人
2009/10/29 07:40:34

>lexicalanalyzer.cを見ていると >#if 0 >と書かれていましたが、どういう意味でしょうか。 #で始まっていることから、#includeと同じようなプリプロセッサの機能であると 見当がつきます。 そこで、「プリプロセッサ」でGoogle検索すると、たとえば以下のようなページが 見つかります。 http://www.cppll.jp/cppreference/preproc_details.html >/*ここから下はテストドライバ*/ >とありました。これはなくてもよいのですか。 >何を意味しているのかを教えてください。 「テストドライバ」でGoogle検索するとWikipediaの以下のページが見つかります。 http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88#.E3.83.86.E3.82.B9.E3.83.88.E3.83.89.E3.83.A9.E3.82.A4.E3.83.90.E3.81.A8.E3.83.86.E3.82.B9.E3.83.88.E3.82.B9.E3.82.BF.E3.83.96
[この投稿を含むスレッドを表示] [この投稿を削除]
[1455] 質問
投稿者:高校生
2009/10/28 11:56:27

scanf()の件はありがとうございました。 lexicalanalyzer.cを見ていると #if 0 と書かれていましたが、どういう意味でしょうか。 本のほうでは、 /*ここから下はテストドライバ*/ とありました。これはなくてもよいのですか。 何を意味しているのかを教えてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1454] Re:DIKSAM_book_0_4のMac/Winでの実行結果について
投稿者:(ぱ)こと管理人
2009/10/28 08:16:30

すみません、時間がないので手短に。 >◎◎結論 >文字列型stringの内部の表現形式は実行環境のC言語コンパイラに依存するとなると、他のUnix/Linuxは >わかりませんが、Mac/Winでの日本語のリテラル処理は、同じソースでは扱えないと思います。 内部の表現形式以前に、test.dkmの文字コードがunix_euc.tarではEUC、 unix_utf8.tarではUTF8になっており、それがそのまま出力されているように 見えます。 echo $LANG とすると、何が表示されますか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1453] DIKSAM_book_0_4のMac/Winでの実行結果について
投稿者:青餓鬼
2009/10/27 14:48:23

Diksam_book_0_4について、WinとMacの実行結果を次に示します。 ★Windowsの場合(XP ソースファイルはwin_sjis.lzh) 正誤表にあるCompilerディレクトリのdiksam.yのblockに関するソース修正を行い、diksam.yの745行目のソースを catch_clause : CATCH { $$ = dkc_start_catch_clause(); } 次のように修正すると catch_clause : CATCH { $<catch_clause>$ = dkc_start_catch_clause(); } makeは正常に終了し、test.dkmを処理してもtest.resultと同じ結果が得られます。 ★Mac(PPC G5,OS 10.4.11 ソースファイルはunix_euc.tar) diksam.yのソース修正をしなくてもmakeは正常に終了しますが、test.dkmを処理しようとすると 726行目のところでエラーとなります。(たぶんエラー内容は下と同じ) そこで次のようにソース修正すると、 string str = "日本語"; for (i = 0; i < str.length(); i++) { println("str[" + i + "].." + str[i]); // if (str[i] == '本') { if (i>0 && str[i-1] == 203 && str[i] == 220) { println("本"); } } 次のような結果が表示されます。 ・・(前の部分省略) 日本語 str[0]..198 str[1]..252 str[2]..203 str[3]..220 本 str[4]..184 str[5]..236 ★Mac(PPC G5,OS 10.4.11 ソースファイルはunix_etf8.tar) diksam.yのソース修正をしなくてもmakeは正常に終了しますが、test.dkmを処理しようとすると 726行目のところで"文字リテラルが2文字以上あります"というエラーとなります。 そこで次のようにソース修正すると、 string str = "日本語"; for (i = 0; i < str.length(); i++) { println("str[" + i + "].." + str[i]); // if (str[i] == '本') { if (i>2 && str[i-2] == 230 && str[i-1] == 156) && str[i] == 172) { println("本"); } } 次のような結果が表示されます。ただし、結果をファイルに落としてWinで表示させると日本語の部分は文字化けします。 ・・(前の部分省略) 日本語 str[0]..230 str[1]..151 str[2]..165 str[3]..230 str[4]..156 str[5]..172 本 str[6]..232 str[7]..170 str[8]..158 ◎◎結論 文字列型stringの内部の表現形式は実行環境のC言語コンパイラに依存するとなると、他のUnix/Linuxは わかりませんが、Mac/Winでの日本語のリテラル処理は、同じソースでは扱えないと思います。 以上、Mac/Winの実行結果を報告します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1452] Re:質問
投稿者:(ぱ)こと管理人
2009/10/27 02:42:42

>crowbarにはC言語で言うscanf(キーボードから入力)的なものは、ありましたでしょうか。 少なくとも最新バージョン(book_ver.0.4)では、fgets()の入力元を STDINにすることでキーボードからの入力が可能です。 str = fgets(STDIN); print(str); Cのscanf()のように、文字列を数値に変換するような機能はありませんので、 必要であればネイティブメソッドを書き足してみてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1451] 質問
投稿者:高校生
2009/10/26 11:20:14

電卓の件は、ありがとうございました。 crowbarにはC言語で言うscanf(キーボードから入力)的なものは、ありましたでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1450] Re:質問
投稿者:(ぱ)こと管理人
2009/10/23 03:05:44

>mycalc|_exで例えば >..5 >とか入力すると >電卓は終了してしまうのですか。 >それともlexical error とかが出るのですか。 現状では、手書きパーサのほうは syntax error. yacc/lex版のほうは、 lexical error. と表示して終了します。 yacc/lex版の_exありのほうは、パーサのエラーについては対処しており、 たとえば 1++2 のように入力すれば、エラーメッセージを出しますが電卓は終了しません。 確かにレキシカルアナライザの方でエラーが出ると終了してしまうので 実用上は対策がおおいに不完全ですが、ここではyaccのエラー処理の仕方を 説明しているということでご理解ください。 …とはいえ補足記事くらいは書いたほうがよさそうですね。検討します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1449] 質問
投稿者:高校生
2009/10/22 15:26:57

mycalc|_exで例えば ..5 とか入力すると 電卓は終了してしまうのですか。 それともlexical error とかが出るのですか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1448] Re:質問
投稿者:(ぱ)こと管理人
2009/10/22 07:35:27

>win_sjisのcalcフォルダにある電卓にはエラー処理はありますか? 本のほうで説明しているのはyaccのエラー処理の方法なので、 calcフォルダ以下の、mycalc_ex以下のmycalc.yにはエラー処理が入っています。 _exでないほうには入っていません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1447] Re:mingw32-make
投稿者:(ぱ)こと管理人
2009/10/22 07:32:48

>情報ありがとうございました。正直、Makefileの中身を書き換える根性はないのですが、 >補足等の形で近日中にUPさせていただきます。 修羅場だったり出張してたりでここに書くのが遅くなりましたが、 申しわけ程度の説明を↓のページに入れました。 http://kmaebashi.com/programmer/devlang/book/winenv.html 今見返しても本当に申しわけ程度ですが……
[この投稿を含むスレッドを表示] [この投稿を削除]
[1446] 質問
投稿者:高校生
2009/10/21 11:52:38

win_sjisのcalcフォルダにある電卓にはエラー処理はありますか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1445] Re:mingw32-make
投稿者:yuya
2009/10/13 06:49:48

……とは言っても、Makefileにコマンドを書いた時点で、そもそもシェル依存なのか。 cdの構文が(ある程度)共通してるのはラッキーだったというだけで。 すいません、ひとりで納得してますm(_ _)m
[この投稿を含むスレッドを表示] [この投稿を削除]
[1444] Re:mingw32-make
投稿者:yuya
2009/10/13 05:52:44

まず、訂正。 >cd ../dvm; $(MAKE)$ 末尾の$は不要でした。 >makeが起動しようとするコマンド行を受け付けるのが、Cmd.exeの場合に >セミコロンを解釈しない、ということでしょうか。 そういうことだろうと思います。 >正直、Makefileの中身を書き換える根性はないのですが、 パスをダブルクォーテーションで囲んでみたり、 なんとかcmd.exeの機嫌をとろうとしたのですが、 うまく行く方法が見つかりません(^^;) 蛇足ですが、cdと$(MAKE)を別行にしてしまうと、 新しいシェルが立ち上がって、cd前のディレクトリに戻ってしまい、 makeで自分と同じMakefileを読みに行って再帰無限地獄に陥いりますよね。 #ってか、MinGWユーザが全員MSYS入れてるわけでもないでしょうし、 #けっこう普遍的な問題のような気がするのですが、情報が見つかりません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1443] Re:mingw32-make
投稿者:(ぱ)こと管理人
2009/10/13 02:17:46

>> cd ../dvm; gmake; >> 指定されたパスが見つかりません。 >> gmake: *** [../dvm/dvm.o] Error 1 > >といったエラーに悩んでる人が出てきてないでしょうか。 > >MSYSだと起こらないので、今日初めて気づいたんですが、 Cygwinを入れている私の環境でもそのままでは再現しませんが、 makeが起動しようとするコマンド行を受け付けるのが、Cmd.exeの場合に セミコロンを解釈しない、ということでしょうか。実際、コマンドプロンプトから 直接入力すると、同様のエラーが出ます。 情報ありがとうございました。正直、Makefileの中身を書き換える根性はないのですが、 補足等の形で近日中にUPさせていただきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1442] mingw32-make
投稿者:yuya
2009/10/12 17:10:57

mingw32-makeを使うときの一般的な話で、CrowbarやDiksamと直接関係ないのですが……。 Makefileに cd ../dvm; $(MAKE)$ などとなっている箇所で、セミコロン以降も全部パスとみなされてしまい、 > cd ../dvm; gmake; > 指定されたパスが見つかりません。 > gmake: *** [../dvm/dvm.o] Error 1 といったエラーに悩んでる人が出てきてないでしょうか。 MSYSだと起こらないので、今日初めて気づいたんですが、 MinGWだけ入れてcmdから直接makeする人はハマる可能性があると思うのです。 余計なお世話ですけど。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1440] Re:「プログラミング言語を作る」のmycalc
投稿者:(ぱ)こと管理人
2009/09/10 03:05:28

>>・そちらのbisonのバージョンが2.1以外であれば、2.1ではどうでしょうか。 >bison2.1にするとちゃんと動くようになりました。 当方と同じ現象が起きているようですね。 >>・m4のみ別途インストールするか、Cygwinを入れてみるとどうでしょうか。 >m4のみ違うバージョンをインストールしてみましたが、だめでした。 > >bisonを空白のないパスにインストールすると、最新のバージョンでも動きました。 こちらについても、わざわざ報告いただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1439] Re:(初歩的な)質問
投稿者:(ぱ)こと管理人
2009/09/10 03:04:01

>gmake [Enter] > >とタイプしたのですが (中略) >というようなメッセージがでて、crowbar.exeがcrowbar_book_0_1のフォルダの中にできました。 おめでとうございます。コンパイルは成功しています。 >crowbar.exeをダブルクリックすればいいのですか?ダブルクリックしても一瞬だけ黒い画面が出るだけです。 crowbarの実行もコマンドプロンプトから行います。 コンパイルしたフォルダにtestというフォルダがあり、この中に、 test.crbというテストプログラムが入っています。 コンパイルしたフォルダから、 cd test[Enter] でtestフォルダに移動してから、 ..\crowbar test.crb[Enter] とタイプしてください。「..\」は「ひとつ上のフォルダ」を意味しますので、 これでひとつ上のフォルダのcrowbar.exeを実行することができます。 あるいは、test.crbをひとつ上のフォルダに移動してから、 コンパイルしたフォルダにて crowbar test.crb[Enter] でもよいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1438] Re:「プログラミング言語を作る」のmycalc
投稿者:wk
2009/09/09 17:08:12

ありがとうございます。 >・そちらのbisonのバージョンが2.1以外であれば、2.1ではどうでしょうか。 bison2.1にするとちゃんと動くようになりました。 >・m4のみ別途インストールするか、Cygwinを入れてみるとどうでしょうか。 m4のみ違うバージョンをインストールしてみましたが、だめでした。 bisonを空白のないパスにインストールすると、最新のバージョンでも動きました。 お忙しいところ、何度もアドバイスありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1437] (初歩的な)質問
投稿者:高校生
2009/09/09 11:58:21

プログラミングを作る の本を使ってやっているのでcrowbar_book_0_1は 「C:\Documents and Settings\s2007070\デスクトップ\win_sjis\crowbar_book_0_1」にあります。そこでコマンドプロンプトで cd C:\C:\Documents and Settings\s2007070\デスクトップ\win_sjis\crowbar_book_0_1[Enter] とタイプして C:\C:\Documents and Settings\s2007070\デスクトップ\win_sjis\crowbar_book_0_1に移動し、そこで gmake [Enter] とタイプしたのですが ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー C:\Documents and Settings\s2007070\デスクトップ\win_sjis\crowbar_book_0_1>gmake cd ./memory; gmake; gmake[1]: Entering directory `c:/Documents and Settings/s2007070/デスクトップ/wi n_sjis/crowbar_book_0_1/memory' gmake[1]: `mem.o' is up to date. gmake[1]: Leaving directory `c:/Documents and Settings/s2007070/デスクトップ/win _sjis/crowbar_book_0_1/memory' cd ./debug; gmake; gmake[1]: Entering directory `c:/Documents and Settings/s2007070/デスクトップ/wi n_sjis/crowbar_book_0_1/debug' gmake[1]: `dbg.o' is up to date. gmake[1]: Leaving directory `c:/Documents and Settings/s2007070/デスクトップ/win _sjis/crowbar_book_0_1/debug' gcc lex.yy.o y.tab.o main.o interface.o create.o execute.o eval.o string.o strin g_pool.o util.o native.o error.o error_message.o ./memory/mem.o ./debug/dbg.o -o crowbar -lm C:\Documents and Settings\s2007070\デスクトップ\win_sjis\crowbar_book_0_1> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー というようなメッセージがでて、crowbar.exeがcrowbar_book_0_1のフォルダの中にできました。 crowbar.exeをダブルクリックすればいいのですか?ダブルクリックしても一瞬だけ黒い画面が出るだけです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1436] Re:「プログラミング言語を作る」のmycalc
投稿者:(ぱ)こと管理人
2009/09/09 03:26:51

>C:\win_sjis\calc\mycalc>make.bat >> error.txt >m4: cannot open `Files\GnuWin32/share/bison': No such file or directory >m4: cannot open `C:\Program': No such file or directory >m4: cannot open `Files\GnuWin32/share/bison/m4sugar/m4sugar.m4': No such file or > directory (後略) このメッセージは見たことがあります。 以下のページの「bisonのインストール」のところで http://kmaebashi.com/programmer/devlang/book/winenv.html >ただし、私の環境では、m4でエラーが出ました。 >Cygwinのものを使おうがMSYSのものを使おうが、 bisonに付属のものを使おうが >エラーになっています。 >bison2.1は動作したので念のため置いておきます。 と書いていますが、この時に発生したエラーがこれでした。 bisonは内部的にm4を使用するのですが、「MSYSのm4は古いからbisonは動かない」という という記述がいくつかのWebページにありましたし、メッセージを見る限り、 確かにm4がエラーを出しています。ただ、その後MSYSをアンインストールして cygwinを入れなおしても状況が改善されず、bisonの入れ直しで(私のところでは)直りました。 ・そちらのbisonのバージョンが2.1以外であれば、2.1ではどうでしょうか。 ・m4のみ別途インストールするか、Cygwinを入れてみるとどうでしょうか。 はっきりした回答ができず申しわけありません。 私の環境では、bisonはC:\Program Files\GnuWin32\bin\bisonであり、 m4はcygwinのものを使用しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1435] Re:「プログラミング言語を作る」のmycalc
投稿者:wk
2009/09/08 14:43:46

ありがとうございます。 >かつ、その中で、該当のエラーになったのは、mycalc以下のmake.batでよいでしょうか? はい。 >エラーメッセージが出るようであれば、そのままこの掲示板にコピペしてください。 C:\win_sjis\calc\mycalc>make.bat >> error.txt m4: cannot open `Files\GnuWin32/share/bison': No such file or directory m4: cannot open `C:\Program': No such file or directory m4: cannot open `Files\GnuWin32/share/bison/m4sugar/m4sugar.m4': No such file or directory m4: cannot open `C:\Program': No such file or directory m4: cannot open `Files\GnuWin32/share/bison/bison.m4': No such file or directory m4: cannot open `C:\Program': No such file or directory m4: cannot open `Files\GnuWin32/share/bison/c-skel.m4': No such file or director y gcc: y.tab.c: No such file or directory mycalc.l:3:19: y.tab.h: No such file or directory mycalc.l: In function `yylex': mycalc.l:12: error: `ADD' undeclared (first use in this function) mycalc.l:12: error: (Each undeclared identifier is reported only once mycalc.l:12: error: for each function it appears in.) mycalc.l:13: error: `SUB' undeclared (first use in this function) mycalc.l:14: error: `MUL' undeclared (first use in this function) mycalc.l:15: error: `DIV' undeclared (first use in this function) mycalc.l:16: error: `CR' undeclared (first use in this function) mycalc.l:20: error: `yylval' undeclared (first use in this function) mycalc.l:21: error: `DOUBLE_LITERAL' undeclared (first use in this function) bisonをインストールした場所が悪かったのでしょうか。エラーを読んでいると、Program Filesが2つのパスに分割されているようにも思えます。環境変数のpathにC:\Program Files\GnuWin32\binを登録してコマンドプロンプトを実行しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1434] Diksamのmakeが成功しました。
投稿者:青餓鬼
2009/09/08 12:05:49

掲示板#1432に指摘されているdiksam.yのソース修正を施すと、 無事gmakeは正常終了しました。 これで先に進めます。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1433] Re:「プログラミング言語を作る」のmycalc
投稿者:(ぱ)こと管理人
2009/09/08 02:45:32

こんにちは。 >ソースファイルをダウンロードして、mycalcをmake.batを実行してgccで >コンパイルすると、lex.yy.cというファイルはできましたが、もう一つの >ファイルはCのファイルではなくy.outputになっています。Windows上で、 >MinGW, MSYS, bison, flexをインストールして実行しています。 >アドバイスいただけないでしょうか。 こちらも確認ですが、そちらで試されたファイルは、以下のページからダウンロード した win_sjis.LZHまたはwin_sjis.zipのいずれかで、 http://kmaebashi.com/programmer/devlang/book/download.html かつ、その中で、該当のエラーになったのは、mycalc以下のmake.batでよいでしょうか? (mycalc_exではなく) lex.yy.cができていて、y.tab.cおよびy.tab.hができていないとすると、 yacc(bison)側が何らかのエラーになっているのではないかと思うのですが、 エラーメッセージの類は出ていないでしょうか? もしmake.batをダブルクリックして実行されているのであれば(それだと仮に エラーメッセージが出ていても読めないので)、以下を参考にコマンドプロンプトから 実行してみてください。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=1426 エラーメッセージが出るようであれば、そのままこの掲示板にコピペしてください。 よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1432] Re:Diksamのmakeでエラーとなる
投稿者:(ぱ)こと管理人
2009/09/08 02:15:10

>こんにちは。初めて投稿します。 はじめまして。 >8月17日にソースコードをダウンロードして、順にコンパイルしているうち、 >Diksamのcompiler項になったら次のようなエラーメッセージが表示されました。 確認ですが、そちらで試されたファイルは、以下のページからダウンロードした win_sjis.LZHまたはwin_sjis.zipのいずれかで、 http://kmaebashi.com/programmer/devlang/book/download.html かつ、その中で、該当のエラーになったのは、diksam_book_0_1でよいですよね。 >>bison --yacc -dy diksam.y >>diksam.y:428 13-14: $$ for the midrule at $2 of 'block' has no declared type >>gmake: *** [y.tab..h] Error 1 428行目でエラーが出ていますが、確かに、diksam_book_0_1のcompiler\diksam.yの 428行目近辺は、以下のようになっています。 1 2 3 4   12345678901234567890123456789012345678901234567890  425:block 426: : LC 427: { 428: $$ = dkc_open_block(); 429: } 430: statement_list RC 431: { 432: $$ = dkc_close_block($<block>2, $3); 433: } 434: | LC RC 435: { 436: Block *empty_block = dkc_open_block(); 437: $$ = dkc_close_block(empty_block, NULL); 438: } 439: ; 428行目の13~14文字目は「$$」ですが、この$$は、埋め込みアクションの ターゲットを示しています。「プログラミング言語を作る」p.206~207で、 「以下のように書くのと同値です。」と書かれている例におけるdummy_targetです。 メッセージを見る限り、dummy_target相当のターゲットは型の宣言をしていないので、 上記のエラーが出ているようです(「ようです」というのは、当方の環境では エラーにならずに動いているためです)。 428行目を以下のように変更して試してみていただけますでしょうか。 428: $<block>$ = dkc_open_block(); 正直、私はもうずいぶん前からここのところは$$で書いていてLinuxでもWindowsでも 動いていたはずですが、確かに、正しくは「$<block>$」と書くべきところかと 思います。 ご報告ありがとうございました。確認のうえでソースの修正および補足記事を Webで出させていただきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1431] 「プログラミング言語を作る」のmycalc
投稿者:wk
2009/09/07 17:17:55

ソースファイルをダウンロードして、mycalcをmake.batを実行してgccでコンパイルすると、lex.yy.cというファイルはできましたが、もう一つのファイルはCのファイルではなくy.outputになっています。Windows上で、MinGW, MSYS, bison, flexをインストールして実行しています。アドバイスいただけないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1430] Diksamのmakeでエラーとなる
投稿者:青餓鬼
2009/09/07 16:37:15

こんにちは。初めて投稿します。 8月17日にソースコードをダウンロードして、順にコンパイルしているうち、Diksamのcompiler項になったら次のようなエラーメッセージが表示されました。 >bison --yacc -dy diksam.y >diksam.y:428 13-14: $$ for the midrule at $2 of 'block' has no declared type >gmake: *** [y.tab..h] Error 1 実行環境はWin XPで、MinGWは今回インストールしましたが、CygWinは1年ほど前にインストールしたものを使っています。 システムの起動もツールとソースコードの展開もDドライブで実行していて、「鬼車」もインストール済みです。 Bisonの文法は自信がないので、エラーの内容について御教授ください。
[この投稿を含むスレッドを表示] [この投稿を削除]