プログラミング言語には二つの系統があります。FortranやCなどの手続き型言語はコードが主役でデータは脇役です。COBOLやSQLなどではデータが主役でコードが脇役になっています。Adamでは、どちらも主役になるように考えています。
ソロモン王の知恵は神から与えられたもので人間の知恵ではありません。彼はシバの女王の求めに応じて包み隠さずに教えました。これは相手を対等の立場にあるものと認めたからです。アダムに対するエバの立場は、ふさわしい助け手です。これは対等の立場のパートナーであって、従者ではありません。
プログラミング言語の歴史を見ますと1950年代にFortranとALGOLが誕生します。このALGOLはチョムスキーの生成文法の唯一の成功事例ともいえるものですが、チョムスキーの四段階の中で役に立つのは下の二つである正規文法と文脈自由文法だけであると言われています。つまり文脈自由とは意味論を排除した文法ということです。この二つを処理するツールがLexとyaccです。
それでは意味論はどうするのかというとyaccでは書くことができなくて隙間に押し込むことになっています。さてシン時間処理の話でも述べたようにウィンドウのプログラムを書くためには処理の支配権を手放さなくてはいけないのです。すると意味論の記述が困難になるのでプログラムが大変なことになっているのが現状です。
それでは神学的にはどうなるかというと、家系図の入れ子関係で対応するわけです。アブラハムの神、イサクの神、ヤコブの神という話です。アブラハムの家にはイサクの家のほかにイシュマエルの家があり、イサクの家にはヤコブの家のほかにエサウの家があるというような話です。これをプログラム風に書きますと、こんな感じです。
Abraham
{
Ishmael
Isaac
{
Esau
Jacob
{
David
}
}
}
こうした入れ子関係で意味論あるいは文脈(context)を処理することになります。すると、おおもとはAdamになるので言語の名前をAdamと呼ぶのが自然だろうとなります。
ちなみにチョムスキーの生成文法には標準理論というものがあり、字句解析・構文解析・意味理解という三段階を後戻りしないで進めることになっています。ここに無理があります。たとえばTime flies like an arrow. という文を時間は矢のように飛ぶという理解とトキバエは矢を好むという理解とが成立する。逆にFruit flies like a banana.という文には果物はバナナのように飛ぶという理解とミバエはバナナを好むという二つの理解が成立します。この解決には意味論が必要なので、必然的に後戻りが要求されるのです。
これは英語のよく使われる単語の多くには複数の品詞としての役割があることに起因していますが、日本語の意味論でよく取り上げられる「僕はウナギだ」という文があります。これは僕はウナギを食べるという理解をすることになっていますが、それでは「吾輩は猫である」はどうでしょうか。また「わたしはカモメ」はどうですか。ちなみにロシア語のヤーチャイカは「わたしはカモメ」とも「こちらカモメ号」とも解釈でき、たぶん両方の意味で発言したと思いますが、二次利用としての日本語の「わたしはカモメ」では違う意味になってくるという話にもなります。意味論は沼なのです。
Adaという言語があるので、Automaton Design Action Managerの略ということでAdamという名前でもよいかなと。ページのタイトルにしてみました。
イメージですが、A言語の母はC言語で父はlispです。lispはLots of Irritating Silly Parenthesisの略だと言われるようにブロックのネストで構成されています。A言語のブロックはKeyword[Label](Parameter){Contents}となっていて、必要のないパーツは省略可能です。またコンテンツが単一のブロックからなる場合は{Contents}の代わりに:Contentsと書くこともできます。
よく知られているようにチョムスキー流の生成文法は意味論に関してはほとんど無力です。生成文法の最大の成果であるALGOL系の言語も同じ弱点があります。もちろんCも含まれます。それに対してlisp流のネスト構造は親子関係と兄弟姉妹の関係を処理できるというメリットがあります。
キーワードは大文字から始まります。これはsmalltalkの流れであり、WinAPIでも採用されています。したがってidentifierは小文字から始めるというsmalltalkからの慣習も成立します。原理的にはキーワードとネストに関する対応を記述すれば文法定義となりそうですので、そうしたものを使えばyaccのようなツールも実現可能と思われます。さて、とりあえずは例題として提示するソースを処理できれば良いという場当たり対応のソースコードになっておりますというのがEva.exeです。
Evaとはオートマトンの拡張版です。その動作を記述するための言語をA言語と言います。最初の例はhello worldです。こんな感じになります。
Eva(100,100)
{
Text("Hello, world")
}
これをメモ帳などで作成しテキストファイルとして拡張子txtで保存します。ただし文字コードをUTF16LEとしてください。Eva.exeを実行して作成したファイル(hello.txtなど)を読み込むと100,100の位置にhello, worldと表示されます。実のところ、意味論としては従来の言語のような描画命令ではなく、そこにテキストが存在しますという主張になっています。その存在がオートマトンの拡張としてのEvaであり、そのEvaに役割をつけていくのがA言語となります。
この後の展開ですが、データベース理論の応用としてcamp zionで遊ぼうとか、その発展形としてcampus zionで学ぼうとか、以前にやりかけたことを突いていこうかと考えています。