「マクロど〜じょ〜」連載開始のお知らせNo.00674
杉浦 まさき さん 99/07/27 01:24
 
ども、杉浦 まさき です。

えっと、以前にここで「公開したらお知らせする」と宣言していた
「マクロの書き方入門」のようなもの(^^;ですが、
下記のページにてぼちぼち連載を始めていますので、
興味のある方は一度覗いてみて下さい。
&達人の方々の厳しい指摘もお待ちしてます(^^;。
ではでは。

「マクロど〜じょ〜」の URL:
  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/lesson/index.html

#しかし…このペースで進めたら、
 基礎を一通り説明し終わるのが21世紀になるかも(^^;。


[ ]
RE:00674 「マクロど〜じょ〜」連載開始のNo.00676
番頭++ さん 99/07/28 12:17
 
index.html の話ですが、紙にすると、

・当ど〜じょ〜の目的
・目次

の順番ですが、html では、

・目次
・当ど〜じょ〜の目的

のほうが便利だと思います。まるで、個人的な意見です。
[戻る] は index.html の先頭に帰るでしょう。

これも個人の趣味ですが、マニュアルを作るときには、
先頭と最後に、次のような html を入れるのが趣味です。

<DIV ALIGN=RIGHT><FONT COLOR="#FF0000"><B>
[ <A HREF="0_previous.html">Previous</A> |
<A HREF="0_next.html">Next</A> |
<A HREF="0_section_index.html">Section Index</A> |
<A HREF="0_master_index.html">Master Index</A> ]
</B></FONT></DIV>

[ ]
RE:00676 「マクロど〜じょ〜」連載開始のNo.00677
番頭++ さん 99/07/28 17:18
 
> insert date" "time;↓
>
> と書いてみたらどうなるでしょうか? 今度は date や time の キーワードは引
> 用符で囲まれていませんから、 先程の様なことはないはずです。 が、今度は文
> 字列が挿入されるどころか 「マクロエラー」になるはず(*1)です。 それは
> 「insert コマンドは文字列の引数を 1つだけ取る」というルールがあるからで
> す(*2)。

これなんですが、マクロ文のコマンド (命令) のオペランドを解析するときには、
左から右へ、演算子の優先度を考慮しながら、評価されて行きます。
トークンに演算子を忘れるとそのトークンは無視される仕様みたいです。

if ( 1 == 0 1 == 1 ){
message date;
}
endmacro;

上の例からもわかるように 1 == 0 を評価して、それを無視して次のトークンと
演算子を評価してしまいます。1 == 1 は true です。

#i = 1 2 3;
#j = 1 2 + 3;
#k = 1 + 2 3;
message str(#i) + ", " + str(#j) + ", " + str(#k);
endmacro;

これで動きが見えてきます。
#k では、1 を評価して + を評価して 2 を評価しますが、
次に演算子が無いので、 2 を無視して、3 を評価します。
ここで二項演算子は、1 + 3 = 4 となります。


[ ]
RE:00676 「マクロど〜じょ〜」連載開始のNo.00678
きいろいまふらあ さん 99/07/28 17:34
 
横から失礼。まふです。

><DIV ALIGN=RIGHT><FONT COLOR="#FF0000"><B>
>[ <A HREF="0_previous.html">Previous</A> |
><A HREF="0_next.html">Next</A> |
><A HREF="0_section_index.html">Section Index</A> |
><A HREF="0_master_index.html">Master Index</A> ]
></B></FONT></DIV>

これ、使わせていただきます。(^_^)
#どこで?とかいうつっこみはなしね。(^^;

[ ]
RE:00678 「マクロど〜じょ〜」連載開始のNo.00679
番頭++ さん 99/07/28 19:20
 
HTML の操作性ですが、
これは Java の tutorial です。操作性はすごくいいです。

http://java.sun.com/docs/books/tutorial/information/download.html

Online Tutorial (last updated July 7, 1999)
tutorial.zip 8.3 MB もあります。

昔 The Java Tutorial が何処かに在りましてそれも操作性が良かったです。
あと、IBM に Webbook が在ります。それも好きです。

Java に興味があったのではなく、HTML でマニュアルを作成するときの操作性を
考慮した場合の調査をしたので、いろいろな HTML のマニュアルをみました。


[ ]
RE:00676 「マクロど〜じょ〜」連載開始のNo.00680
杉浦 まさき さん 99/07/29 00:58
 
番頭++ さん、こんばんは。
杉浦 まさき です。

#前回の発言で言い忘れてましたが、
 マクロど〜じょ〜に関するご意見、ご感想等は
 僕のページの「サポート会議室」にて発言して頂くよう
 お願い致しますm(_ _)m。

さて、

>index.html の話ですが、紙にすると、

>[戻る] は index.html の先頭に帰るでしょう。

>これも個人の趣味ですが、マニュアルを作るときには、

>先頭と最後に、次のような html を入れるのが趣味です。

う〜ん、早速のご意見どうもですm(_ _)m。
次の更新で全部(^^;反映したいと思います。


[ ]
RE:00677 「マクロど〜じょ〜」連載開始のNo.00681
杉浦 まさき さん 99/07/29 01:08
 
番頭++ さん、こんばんは。
再び 杉浦 まさき です。

>これなんですが、マクロ文のコマンド (命令) のオペランドを解析するときには、
>左から右へ、演算子の優先度を考慮しながら、評価されて行きます。
>トークンに演算子を忘れるとそのトークンは無視される仕様みたいです。

なるほど、そういうことですか…納得(^^;。
で、わざわざ調べて頂いたのであれば申し訳ないんですが、
それをあらためて説明するようなことは
多分しないと思います。混乱しそうなので。
#ディープな話に突入したら…やっぱりしよっかな(^^;。


[ ]
RE:00680 「マクロど〜じょ〜」連載開始のNo.00682
番頭++ さん 99/07/29 12:43
 
> マクロど〜じょ〜に関するご意見、ご感想等は
> 僕のページの「サポート会議室」にて発言して頂くよう
> お願い致しますm(_ _)m。

すみません、
いきなりここの URL をクリックしたので「サポート会議室」の存在を ...
そうします。でもマクロに関するコメントはここに書くことにします。
ここの履歴はいつか消えます。それが「マクロど〜じょ〜」にノウハウとして
蓄積されると、個人的には、イイナーと思います。


[ ]
RE:00681 「マクロど〜じょ〜」連載開始のNo.00683
番頭++ さん 99/07/29 12:48
 
>#ディープな話に突入したら…やっぱりしよっかな(^^;。

確かに混乱を招きますが、
いつかは演算子の優先順位を説明する日が来ると思います。
算術式 (算数、数学) の
    A = B + ( C - D * E / F ) * G
とかを例にして説明して、マクロの数式の説明になるのではないかと思います。
それに、AND、OR、とか NOT の論理演算子も加わりますでしょう。
マクロを書いていると、一度は在りそうな演算子の書き忘れ、
それでも動く「秀丸」のマクロですから、作者の性格でしょうね。

「秀丸」の作者は数百行もあるマクロを見ると「ほんとにうごくのかなぁ ...」
との事でした。作者でもないあちきが「うごいています ...」と、
へんな会話です。

[ ]
RE:00683 「マクロど〜じょ〜」連載開始のNo.00685
杉浦 まさき さん 99/07/29 23:57
 
番頭++ さん、こんばんは。
杉浦 まさき です。

>確かに混乱を招きますが、
>いつかは演算子の優先順位を説明する日が来ると思います。

指摘されている点がイマイチ理解できませんでしたが…m(_ _)m

前回説明して頂いた「仕様」ですが、
僕としては
「ああいう動作をするように明示的に作られているわけではなく、
 マクロコードを解釈するアルゴリズムが”たまたま”
 あのように処理を行うようになっていた」
という見解を持っています。
#もしくは「なるべくマクロエラーにならないように」か、
 「過去のマクロでも動作するように
  互換性を保つための処理」かなぁ…??>過去をご存知の方(^^;

で、あの連載の目的を端的に表現すると、
 「こんなイレギュラーな書き方もできるよ〜ん」ということより、
 「こういう場合はこれこれこう書くのが普通です」ということを伝えたい、
のです。ですから、
今後ベーシックな話の中では例の仕様には触れないつもりです。
#その意味では、あの例が「確実に」マクロエラーにならなかったのは
 非常に痛かったです(^^;。まぁそれが「秀丸マクロ」ですから
 文句を言ってもしょうがないんですが…。
#これからは軽々しく
 「秀丸マクロはC言語と似た様な構文です」とは
 言わないように。>σ(^^;


[ ]
RE:00685 「マクロど〜じょ〜」連載開始のNo.00686
番頭++ さん 99/07/31 15:20
 
作者ではないのでその意図はわかりませんが、

        #i = +  1 2;
        message str(#i);    //  OK !
        message str(1 2);   //  OK !
    endmacro;

        message date time;
        message str(1 + + 2);   //  NG !
        message + date; //  NG !
        $string1 = + "text";    //  NG !
    endmacro;

の例から想像すると、二項演算子の解析(parse)というよりは、二項演算子の実
行(execute)時にオペランドの重複があると最後のオペランドを生かしているみ
たいです。演算子の重複はエラーになります。一般的にはバグと呼ばれますが、
あちきはこの件に関して報告したことは今回が初めてです。 Win 3.x は在りま
せんが、でも昔(?)からそうです。想像するに OS 2 の時代から ...

C 言語と同じではないのですが、C 言語を意識して作られたのは事実だと想像で
きます。演算子の「優先順位がC言語と異なるので ... 」からの想像です。


[ ]