K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>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の実行結果を報告します。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!