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