HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0320
レヴィンhsp3.1β2のバグ11解決


レヴィン

リンク

2006/3/20(Mon) 10:55:35|NO.43


if (u==0):{ b=0 } else { h=0 }

上記のように記述すると

#HSP script preprocessor ver3.1b2 / onion software 1997-2006(c)
#Source file not found.[userdef.as]
#HSP code generator ver3.1b2 / onion software 1997-2006(c)
???(9) : error 14 : elseの前にifが見当たりません (9行目)
-->

と表示され動作しません。
これは3.0の時からあったのですが、ifの}とelseが1行以内にないとなぜかエラー
になります。2.61の時はこんなことありませんでした。

自分の場合見やすくするために1・2行以上開けます(if-elseを使ったらほぼ確実に)。

細かいことかもしれませんが、高度な機能をつける前にこういうところを直してほしいです。



この記事に返信する


OK

リンク

2006/3/21(Tue) 15:54:55|NO.61

ううん、たとえばCやC++の実装系でこういうのがあれば大問題ですが、
HSPの場合Cなどと違い、改行が大きな意味を持つので、
これを修正するのは無理だと思います。

(Cで


if ( u==0 ){ b=0; }; else { h=0; }

と書くようなもんです。



くに

リンク

2006/5/13(Sat) 06:08:45|NO.703




Drip

リンク

2006/5/13(Sat) 12:27:07|NO.705

Dripです。

 レヴィンさん、こんにちは。
確かにその書式ではエラーしますが、その書式はかなり不気味に見えます。
といいますのも、OKさんと同意見になるのですが、HSPでは改行にプログラム的な意味合いを
含めることができるため、Cのセミコロン的な役割も果たしているからです。
確かにHSPのエディタや、コンパイラ自体に変なバグが多いです。その代表的なものを
以下に示します。

●次の書式で実行するとエラーを返す。

x+(3) //エラー x+(y) //エラー
●実行しても何も表示されない

#define x 32 //この値は変更可能 mes "xの値は"+x+"です。" #define y 32 //この値は変更不能 mes "yの値は"+y+"です。" stop //ここまで来ても何も表示されません。
●HSPスクリプトエディタでこのコマンドを入力すると一般保護エラーで終了してしまう。

 Enter Enter ↑ Delete ↑



ひらめ

リンク

2006/5/13(Sat) 18:10:52|NO.707

>●実行しても何も表示されない
>
>#define x 32 //この値は変更可能
>mes "xの値は"+x+"です。"
>#define y 32 //この値は変更不能
>mes "yの値は"+y+"です。"
>stop //ここまで来ても何も表示されません。
これについてはdefineのあとに改行を入れれば解決するようです



ひらめ

リンク

2006/5/13(Sat) 18:12:16|NO.708

すいません
僕の環境はHSP3でした



Drip

リンク

2006/5/13(Sat) 18:59:35|NO.709

Dripです。

 ひらめ さん、こんにちは。

> これについてはdefineのあとに改行を入れれば解決するようです

 当たり前です。今回は、この不具合の回避方法が本質的な問題ではありません。
本来ならば正しく動くべきところが動かないことに問題があります。
正しいスクリプトが、ある特定の状況下で動かないとなると、その条件を知らないユーザーは
解決不可能な問題に直面する恐れがあるためです。

 私が提示した問題は、初心者でもわかりやすい場所(マニュアルやHSPトップページ等)に
記載されているわけでもなく、“放置状態”になっているため、あまり良くない状況だと思います。
バグトラックにあげられているものもありますが、こうした類の不具合は自分のスクリプト内で
発生しているのかどうか究明困難なものも多く、HSPそのものが改善されない限りは、
本質的な解決にはなりません。



Irisawa

リンク

2006/5/13(Sat) 19:06:19|NO.710

>>705, Drip さん

> ●次の書式で実行するとエラーを返す。

x+(3) //エラー x+(y) //エラー
これは原因はよく分かりませんがHSP文法上は

x + 3 x + y
などは通るので不具合でしょうね。
(上記の書き方が正式なものかどうかは別として)

> ●実行しても何も表示されない

#define x 32 //この値は変更可能 mes "xの値は"+x+"です。" #define y 32 //この値は変更不能 mes "yの値は"+y+"です。" stop //ここまで来ても何も表示されません。
これはSJISのエンコードの関係です。
「能」という字がSJISでバックスラッシュ(\)を含んでいるのが原因でPerlなどの海外の
開発系ソフトで発生する現象と原因は同じです。
(#defineは行末にバックスラッシュを入れると次の行と結合する)

これはかなり以前から報告されていますが、プリプロセッサの不具合です。
修正は難しいようです。
他にも「十」とか「ソ」などよく使う文字の一部などが同様の現象になります。

http://ja.wikipedia.org/wiki/%EF%BF%A5%E8%A8%98%E5%8F%B7#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.AB0x5C.E3.82.92.E6.8C.81.E3.81.A4.E6.96.87.E5.AD.97.EF.BC.88.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E3.83.80.E3.83.A1.E6.96.87.E5.AD.97.E3.80.8D.EF.BC.89.E4.B8.80.E8.A6.A7

> ●HSPスクリプトエディタでこのコマンドを入力すると一般保護エラーで終了してしまう。

 Enter Enter ↑ Delete ↑
これはスクリプトエディタではなくてFootyエディットコントロールの不具合です。
Footyエディットコントロールを使用しているプリケーションですべて再現します。
Footyは開発が終了しており、Footy2の正式版がでるまではhsed3の方でも対応しない
方針です。
(Footy2で修正されていればの話ですが...)



Irisawa

リンク

2006/5/13(Sat) 19:33:05|NO.711

> Footyは開発が終了しており、Footy2の正式版がでるまではhsed3の方でも対応しない
> 方針です。

すみません。
「方針の『よう』です。」
でした。



くに

リンク

2006/5/14(Sun) 02:33:48|NO.715

>x+(3) //エラー
>x+(y) //エラー

これは、構文解析の問題と思うので、
その辺をおにたまさんに改良してもらえば、
大丈夫かと思います。

>#define x 32 //この値は変更可能
>mes "xの値は"+x+"です。"
>#define y 32 //この値は変更不能
>mes "yの値は"+y+"です。"
>stop //ここまで来ても何も表示されません。

Irisawaさんの言うとおりだとすると、
ソースをUnicodeなどで処理できるようにしてもらう
といった方法が妥当でしょうか。

>  Enter Enter ↑ Delete ↑
>
>これはスクリプトエディタではなくてFootyエディットコントロールの不具合です。
>Footyエディットコントロールを使用しているプリケーションですべて再現します。
>Footyは開発が終了しており、Footy2の正式版がでるまではhsed3の方でも対応しない
>方針です。
>(Footy2で修正されていればの話ですが...)

すこし前ですが、これについて、バグトラックに
報告しておきました。

68: エディタが落ちるバグ
http://quasiquote.org/hspbt/guest?project=hspb3&action=view_report&id=68

Footyのバグとしても、Footy2版を同梱するとか
他のエディタを紹介するなどの対処が必要だと思います。



レヴィン

リンク

2006/5/14(Sun) 11:57:53|NO.721

正直かなり前に立てたスレッドにこんなにレスが来るなんて…

if-elseに関してもう仕方がないのでないので空行を入れないで書いています。

>>その書式はかなり不気味に見えます
そうゆうものなんでしょうか…

>>HSPでは改行にプログラム的な意味合いを
>>含めることができるため、Cのセミコロン的な役割も果たしているからです
そうゆうことは分かってます。その上で言ってます。

>>その他のバグ
初耳のものが結構ありますね。こういうのって、自分でやっているところに起きないと
気づかないことが多いですからね(自分の場合はね)。

まぁ、報告してもそう簡単に修正されるとも思ってないんで、今はあきらめて空行を入れず
に書いてます。



kz3

リンク

2006/5/14(Sun) 15:00:01|NO.725

>自分の場合見やすくするために1・2行以上開けます(if-elseを使ったらほぼ確実に)。
>if-elseに関してもう仕方がないのでないので空行を入れないで書いています。

コーディングスタイルは人様々で「これがいい」というものはありませんので良し悪しは抜きにして、私もレヴィンさんのif-elseのスタイルについては
いままで見たことない書き方だなぁとは思いましたけど、

1: if ...{ 2: ... 3: ... 4: } 5: else{ 6: ... 7: ... 8: }
4,5行目にスペースを空けるのではなくて、

1: if ...{ 2; 3: ; コメント 4: ... 5: ... 6: 7: }else{ 8: 9: ; コメント 10: ... 11: ... 12: 13: }
if-else文の中身でスペースを設けるのは気に入りませんか?



ONION software Copyright 1997-2018(c) All rights reserved.