K.Maebashi's BBS 管理者削除

以下の投稿を削除します。

[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の実行結果を報告します。

代替メッセージ

物理削除     パスワード: