>こんにちは。初めて投稿します。
はじめまして。
>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で出させていただきます。