異常なプログラミング:メモ帳++のマクロインタープリター

スワップ







値の交換。 ソーステキストと、1回目、2回目、3回目のマクロ実行後のテキスト。 以下は、より複雑な例です。







原始的なプログラミングのためにマクロを適応させるというアイデアは、何度か思いつきました。 つまり、マクロに開始時の操作で行を「読み取らせ」、解釈し、データを処理して、次の行に移動します。







念のため、メモ帳++およびその他のテキストエディターのマクロは、テキストに対するユーザーアクションの記録されたシーケンスです。 マクロを複数回実行して、ルーチン操作をすばやく実行できます。 マクロはキーストロークを「記憶」し、たとえば次のアクションを再生できます。









最初は、マクロが「愚かすぎ」て単純すぎるため、不可能に思えました。









2番目の項目については、ソリューションが見つかりました- Search -> Find (Volatile) Next (Ctrl+Alt+F3)



。 この操作は、強調表示されているものを検索します。 彼女のおかげで、選択に応じて動的な移行を行うことができます。 しかし、最初のポイントを回避することは不可能に思えました。 そのようなコードを実行する方法がないことが判明しました。







 a = 1 if --...
      
      





マクロは、最初の行では割り当てを実行する必要があり、2行目では条件付きジャンプを行う必要があることを判断できません。 これは、すべてを1つの操作で行う必要があることを意味します。 このようなもの:







 // a:0 // a = 1 goto label1 label1: a = 2 goto label2
      
      





ラベルを表示するには、強調表示された検索を使用する必要があります。 しかし、そのような問題がありました-条件付き遷移を実装する方法。 明らかに、常に移動する必要がありますが、ラベルを変更することにより:







 [a]:0 a = 1 goto label[a] label1:
      
      





変数の値は[a]



置き換えられ、label1、label2、またはlabel_helloを取得します。 置換は常に実行される必要があるため、無条件遷移の場合、サービス変数[]は空の値で表示されます。







 []: [a]:0 a = 1 goto label1[] label1: ...
      
      





空の値はコピーできないため、すべての変数ストアの値の後にスペースを追加し、置換後に削除する必要がありました。 不便ですが、もっと良くする方法がわかりません。 最終的に、オペレーションのラインは次の形式を取得しました。







 w: w[w]w = w[w[w]w]ww[w]w
      
      





ここで、正規表現の\w*



、つまり、英数字とアンダースコア文字で構成されます。 マクロは変数置換を4回実行し、変数の値を保存して遷移します。







マクロ原理



簡単な例を考えてみましょう。







 label1: b[index] = [a[]] label2[] label2: []: [a]:Hello_world [index]:2 [b2]:
      
      





カーソルは最初の行の先頭にあると考えます。 通常の\w*\[\w*\]\w*



が検索され、最初の出現箇所が強調表示されますb[index]



ます。 >>>



を追加した後、行末にコピーして貼り付けます。







 label1: b[index] = [a[]] label2[]>>>b[index]
      
      





\[\w*\]



後にコロンが追加され、 [index]:



[index]:



によって強調表示されます。 次に、そのような次の出現について検索が行われます。 すべてが正しい場合、これは変数の値を持つ場所です。 値が強調表示され、コピーされます。 戻り値は>>>



を検索して作成されます。 通常は[index]:



この式の代わりに、変数の値が挿入されます。 すべての式は角括弧で「ラップ」され、結果の変数名をさらに検索するためにコロンが追加されます。







 label1: b[index] = [a[]] label2[]>>>[b2]:
      
      





さらに似ていますが、等式の右側の式に対して二重置換が実行されます。







 (1) label1: b[index] = [a[]] label2[]>>>[b2]:>>>[a[]] (2) label1: b[index] = [a[]] label2[]>>>[b2]:>>>[a] (3) label1: b[index] = [a[]] label2[]>>>[b2]:>>>Hello_world
      
      





同じ原理で変数の値を書きます。 そして最後に、ラベルの名前の置換が実行され、それに移行があります。







 (1) label1: b[index] = [a[]] label2[]>>>label2[] (1) label2: (2) label1: b[index] = [a[]] label2[]>>>label2 (2) label2: (3) label1: b[index] = [a[]] label2[]>>>label2 (3) >>>label2: (4) label1: b[index] = [a[]] label2[] (4) >>>label2: (5) label1: b[index] = [a[]] label2[] (5) label2:
      
      





行の終わりにある「ゴミ」を削除するには、マーカーでトランジションマークをマークする必要があります。









こんにちは世界!



マクロの実行は最初の行でループします。







 label: out[] = Hello_world[[]] label[] [out]:Hello_world []:
      
      





値の交換(スワップ)



 l1: t[]=[a[]] l2[] l2: a[]=[b[]] l3[] l3: b[]=[t[]] l1[] []: [a]:World [b]:Hello [t]:
      
      





マクロの最初と3回の実行後:







スワップ







サブルーチン呼び出し



同じスワップで、別のサブルーチンに移動しただけです。 [[swap_var0]]



構成体を使用すると、swap_var0に名前がある変数の値を取得できます。







 l1: swap_var0[] = a[[]] l2[] //  1  l2: swap_var1[] = b[[]] l3[] //  2  l3: swap_ret[] = l1[[]] swap[] //   //    []: [a]:Hello [b]:World ##### Swap [swap_var0]: [swap_var1]: [swap_ret]: swap: _swap_temp[] = [[swap_var0]] _swap_2[] -- private _swap_2: [swap_var0] = [[swap_var1]] _swap_3[] _swap_3: [swap_var1] = [_swap_temp[]] [swap_ret] [_swap_temp]: #####
      
      





1桁の10進数の増分



 l1: inc__var[] = a[[]] l2[] l2: inc__ret[] = inc__begin[[]] inc__begin[] []: [a]:0 ##### Increment [inc__var]:a [inc__ret]: inc__begin: _inc__val[] = [[inc__var]] _inc[] -- private _inc: [inc__var] = [_inc__map[_inc__val]] [inc__ret] [_inc__val]: [_inc__map0]:1 [_inc__map1]:2 [_inc__map2]:3 [_inc__map3]:4 [_inc__map4]:5 [_inc__map5]:6 [_inc__map6]:7 [_inc__map7]:8 [_inc__map8]:9 [_inc__map9]:0 #####
      
      





3桁の10進数の増分



増分する場合、オーバーフローを監視して高位に転送する必要があります。 したがって、2番目のオーバーフロー出力がインクリメントルーチンに追加されました。 はい、タグは連続して配置できます。







 l01: inc__var[] = a[[]] l02[] l02: inc__ret[] = inc__begin[[]] l03[] l03: inc__over_ret[] = l11[[]] inc__begin[] l11: inc__var[] = b[[]] l12[] l12: inc__ret[] = l01[[]] l13[] l13: inc__over_ret[] = l21[[]] inc__begin[] l21: inc__var[] = c[[]] l22[] l22: inc__ret[] = l01[[]] l23[] l23: inc__over_ret[] = l01[[]] inc__begin[] []: [c]:0 [b]:0 [a]:0 ##### Increment [inc__var]: [inc__ret]: [inc__over_ret]: inc__begin: _inc__val[] = [[inc__var]] _inc[] -- private _inc: [inc__var] = [_inc__map[_inc__val]] i[_inc__val] i0:i1:i2:i3:i4:i5:i6:i7:i8: _inc__val[] = [_inc__val[]] [inc__ret] i9: _inc__val[] = [_inc__val[]] [inc__over_ret] [_inc__val]: [_inc__map0]:1 [_inc__map1]:2 [_inc__map2]:3 [_inc__map3]:4 [_inc__map4]:5 [_inc__map5]:6 [_inc__map6]:7 [_inc__map7]:8 [_inc__map8]:9 [_inc__map9]:0 #####
      
      





バブルソート



配列のサイズと可能な値の両方が0〜9に制限されています。長時間機能しますが、ソートされます。 マクロを複数回実行し、2000回の反復を設定すると、実行に約1分かかります。 比較の最初の実装は非常に低速でした。各数値は、そのうちの1つが0に達するまでデクリメントされました。現在はいですが、比較的高速です。







バブルソート
 s000: it_remain[] = 8[[]] s010[] s010: index0[] = 8[[]] s020[] s020: index1[] = 9[[]] s030[] // ,    s030: swap_if__var0[] = array[index0[]] s040[] s040: swap_if__var1[] = array[index1[]] s050[] s050: swap_if__ret[] = s060[[]] swap_if__begin[] // 1-  s060: dec__var[] = index1[[]] s070[] s070: dec__ret[] = s100[[]] s080[] s080: dec__zero_ret[] = s100[[]] dec__begin[] // 2-  s100: dec__var[] = index0[[]] s110[] s110: dec__ret[] = s030[[]] s120[] s120: dec__zero_ret[] = s200[[]] dec__begin[] //    s200: dec__var[] = it_remain[[]] s210[] s210: dec__ret[] = s010[[]] s220[] s220: dec__zero_ret[] = finish[[]] dec__begin[] [array0]:5 [array1]:3 [array2]:7 [array3]:3 [array4]:2 [array5]:3 [array6]:1 [array7]:2 [array8]:4 [array9]:1 [index0]: [index1]: [it_remain]: ##### special []: [stub]:stub [finished]:no finish: finished[]=yes[[]] finish[] ##### ##### Swap if not less [swap_if__var0]: [swap_if__var1]: [swap_if__ret]: swap_if__begin: less__val0[] = [[swap_if__var0]] _swap_if1[] -- private _swap_if1: less__val1[] = [[swap_if__var1]] _swap_if2[] _swap_if2: less__ret0[] = [swap_if__ret[]] _swap_if3[] _swap_if3: less__ret1[] = _swap_if4[[]] less__begin[] _swap_if4: _swap__tmp[] = [[swap_if__var0]] _swap_if5[] _swap_if5: [swap_if__var0] = [[swap_if__var1]] _swap_if6[] _swap_if6: [swap_if__var1] = [_swap__tmp[]] [swap_if__ret] [_swap__tmp]: ##### ##### Less [less__val0]: [less__val1]: [less__ret0]: [less__ret1]: less__begin: stub[] = [stub[]] _less__[less__val0] -- private _less__0: stub[] = [stub[]] s0[less__val1] _less__1: stub[] = [stub[]] s1[less__val1] _less__2: stub[] = [stub[]] s2[less__val1] _less__3: stub[] = [stub[]] s3[less__val1] _less__4: stub[] = [stub[]] s4[less__val1] _less__5: stub[] = [stub[]] s5[less__val1] _less__6: stub[] = [stub[]] s6[less__val1] _less__7: stub[] = [stub[]] s7[less__val1] _less__8: stub[] = [stub[]] s8[less__val1] _less__9: stub[] = [stub[]] [less__ret1] s01:s02:s03:s04:s05:s06:s07:s08:s09:s12: stub[] = [stub[]] [less__ret0] s13:s14:s15:s16:s17:s18:s19:s23:s24:s25: stub[] = [stub[]] [less__ret0] s26:s27:s28:s29:s34:s35:s36:s37:s38:s39: stub[] = [stub[]] [less__ret0] s45:s46:s47:s48:s49:s56:s57:s58:s59:s67: stub[] = [stub[]] [less__ret0] s68:s69:s78:s79:s89: stub[] = [stub[]] [less__ret0] s00:s10:s11:s20:s21:s22:s30:s31:s32:s33: stub[] = [stub[]] [less__ret1] s40:s41:s42:s43:s44:s50:s51:s52:s53:s54: stub[] = [stub[]] [less__ret1] s55:s60:s61:s62:s63:s64:s65:s66:s70:s71: stub[] = [stub[]] [less__ret1] s72:s73:s74:s75:s76:s77:s80:s81:s82:s83: stub[] = [stub[]] [less__ret1] s84:s85:s86:s87:s88: stub[] = [stub[]] [less__ret1] ##### ##### Decrement [dec__var]: [dec__ret]: [dec__zero_ret]: dec__begin: _dec__val[] = [[dec__var]] d[_dec__val] -- private d1:d2:d3:d4:d5:d6:d7:d8:d9: [dec__var] = [_dec__map[_dec__val]] [dec__ret] d0: [dec__var] = [_dec__map[_dec__val]] [dec__zero_ret] [_dec__val]: [_dec__map0]:9 [_dec__map1]:0 [_dec__map2]:1 [_dec__map3]:2 [_dec__map4]:3 [_dec__map5]:4 [_dec__map6]:5 [_dec__map7]:6 [_dec__map8]:7 [_dec__map9]:8 #####
      
      





設置



突然試してみたい場合は、 %APPDATA%/Notepad++/shortcuts.xml



ファイルの<Macros>



要素に%APPDATA%/Notepad++/shortcuts.xml



挿入します。







マクロコード
  <Macro name="npplang" Ctrl="yes" Alt="yes" Shift="yes" Key="69"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\w*\[\w*\]\w*" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2451" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2326" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="[" /> <Action type="0" message="2451" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="]" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="0" message="2453" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\w*\[\w*\[\w*\]\w*\]\w*" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2451" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2326" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2326" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2304" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2180" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2453" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\w*\[\w*\]\w*" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\w*\[\w*\]\w*" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\w*\[\w*\]\w*" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2451" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2178" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="\[\w*\]:" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2326" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2451" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2306" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="2" message="0" wParam="43014" lParam="0" sParam="" /> <Action type="0" message="2304" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&gt;" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="256" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2452" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2180" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&gt;&gt;&gt;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2180" wParam="0" lParam="0" sParam="" /> </Macro>
      
      





マクロを起動するには、 Ctrl+Shift+Alt+E









おわりに



グローバル変数から離れるスタックを作成するというアイデアがありました。 次に、たとえば、再帰を実装することが可能になります。 , . , , .








All Articles