プログラミング言語を開発してみた

なんて言うと大袈裟だが、「マクロ言語の開発」となると、かなりハードルが下がるように感じないだろうか。
ウィキペディアによると、
「マクロ言語は、アプリケーションソフトウェアの機能を直接キーボードやマウスなどから利用するのではなく、プログラムから利用するためのプログラミング言語である。」
と、定義されている。

要約すると、
「マクロ言語は、プログラミング言語である。」
ということになる。

そこで、Javaの標準ライブラリの中から
「java.awt.Robot」
にスポットを当てた言語開発にチャレンジしてみる。
このクラスは、OS上でマウス及びキーボードイベントを発生させることができるという特徴がある。
Robotを利用すれば、システムを自動でテストできる(かもしれない)。
実行環境セットを以下に格納している。
※実行中は、くれぐれもマウスやキーボードに触らないように。
<<<Google Group>>>
http://groups.google.co.jp/group/yk-inventory?hl=ja



<<開発のポイント>>

1.プログラミング言語の開発には、字句解析・構文解析が必要となる。
   字句解析とは、関数・変数・定数などを解釈することで、
   構文解析とは、字句の位置や順序を解釈することである。

2.プログラマでなくても簡単にプログラムを書けなくてはならない。
   元々のJavaよりも、難解なのでは開発する意味がなくなってしまう。
   今回は、一定の単純な規則になるような構造にした。
   分岐や繰り返しすらない。

3.問題が発生しそうな機能は、ユーザに解放しない。
   Robot利用時に問題となるのが、アプリ終了後のイベントの解放であるが、
   マウスをプレスするとリリースが必要となるのである。
   誤って、リリース処理が洩れると対象のアプリが異常な挙動を示す場合がある。
   対処として、プレス機能は解放せずに、代わりにクリック機能と
   ドラッグ&ドロップ機能を作成して、それをユーザに提供することとした。



<<処理概要>>

Executable Jarに解析プログラムを格納して、JavaRuntime環境配下での起動を可能とする。
Jarはダブルクリックで起動して、同階層のディレクトリから「robot.txt」というファイルを読み込む。
そのファイルの一行目には、ユーザが作成したマクロのファイルパスを記載する。
次に、ファイルパスを元にマクロを開き、解析をしながら、マクロに記述された処理を進めていく。



<<関数一覧>>

comm [comment] ← コマンド内でのコメント

skey [key] ← keyの単独押下

wkey [key1] [key2] ← keyの二重押下

lkey [string] ← 文字列入力(全角モードで、自動でひらがなに確定する。)

kkey [string] ← 文字列入力(全角モードで、自動でひらがなに確定しない。)

mclk [button] ← マウスのクリック(LEFT または RIGHT)

mmov [x] [y] ← マウスの移動

drdr [x1] [y1] [x2] [y2] ← マウスの移動

wait [time] ← 待機(アプリ起動時は、起動中の待機時間が必要)