• 検索結果がありません。

XML で記述されたスクリプト言語 ScriptXML

N/A
N/A
Protected

Academic year: 2021

シェア "XML で記述されたスクリプト言語 ScriptXML"

Copied!
4
0
0

読み込み中.... (全文を見る)

全文

(1)

日本ソフトウェア科学会第

25

回大会(2008年度)論文集

1

XML で記述されたスクリプト言語 ScriptXML

ScriptXML—A Script Language Written in XML

林 恒俊

Tsunetoshi HAYASHI

立命館大学情報理工学部メディア情報学科

Dept. of Media Information Science, Ritsumeikan University [email protected]

通常プログラミング言語はテキストデータないしは清書文書として記述される

.

本発表ではテキストの代わ りに

XML

を用いてプログラムを記述するアイデアを提案する

.

さらに

, XML

による記述についてプログラ ミング言語の性質と比較して考察し具体的な記述例を提示する

.

さらに処理系のあり方について検討し

,

釈プログラムの実装方法を提案する

.

最後に既存のプログラミング言語記述と当発表のそれについて検討し

,

将来の発展方向を考察する

.

1

はじめに

プロフラミング言語は非常に少数の例を除いてテ キストデータで記述されるか,あるいは

Algol

系列言 語のように清書化テキストで記述される

.

これは記録 に必要な資源が少なくてすむことや高度の移植性を もたせることができる等の利点がある. しかし反面

処理系に必ず字句処理や構文解析が含まれる

Web

ページのように構文が異なる複数の記述

(HTML, CSS, JavaScript)

が含まれる場合, 存させるために手間がかかる

等の欠点がある. これらの欠点を克服するためには,

プログラムの構造を直接表現可能

他の記述と同一の構文

という性質を持った表現手段を採用すればよい

.

ScriptXML

はこの原則に基づいて構成されたプロ

グラミング言語である.

2 ScriptXML

2.1

基本原理

一般にプログラミング言語の構文は文脈自由文法 に基づいた手法により定義されている. 具体的には

BNF

乃至は拡張

BNF

が実際的に利用される

.

一部 の言語のように定義が構文図の場合でも適切に変換 すれば文脈自由文法で記述することができる

.

文脈自由文法で定義された言語は一般に入れ子あ るいは階層構造を示し,木構造により表現することが

可能である

.

任意の原プログラムについてコード生 成を行ったり,解釈実行するためには,この木構造が 主要な情報源である. 言語処理系の字句処理や構文 解析はテキストによるプログラム記述から木構造を 抽出するための手段にすぎない.

したがって原プログラムをあらかじめ木構造で記 述し,その木構造からコード生成や解釈実行に必要な 情報を参照する手段を準備できれば言語処理系の前 処理に関する無駄を省くことが可能である

.

階層構造データを汎用的に表現し交換する既存の 代表的な手段の例には次のようなものが考えられる

.

ASN.1 (Abstract Syntax Notation One) aka X409[2]

XML (eXtensible Markup Language)[1]

両者ともに汎用木構造を記述するためには十分な機 能があり,原プログラムを表現することが可能である.

実用上現存する複数の

Web

ページブラウザは

XML

構文解析能力と木構造参照ライブラリを備えたアプ リケーションでありこれを利用しないことは考えら れないので本発表では

XML

を原プログラム記述手 段に採用した.

このようにして定義された言語はプロダクション に利用するよりも,むしろ簡易な処理を実装するスク リプト記述向き利用に適している

.

したがってこの言語を以下では

ScriptXML

と呼ぶ.

さらに

Web

ブラウザ自身が単独のアプリケーショ ンとして構築されるよりもブラウザ機能を実現する,

例えば

Webkit[4]

のようなフレームワーク上に作成

(2)

日本ソフトウェア科学会第

25

回大会(2008年度)論文集

2

されるようになっている

.

このようなフレームワー クを利用すればスクリプト処理系を独立したアプリ ケーションとすることも可能である.

また既存の

OS

でも

XML

は内部情報記述に広く 利用されていて

OS

の支援も手厚い.

2.2

動機

林による

HyperPage[3]

の報告には

HyperCard

かわる文書創成プログラムについて述べられている.

HyperPage

は文書を目的指向な枠組みに基づいて構

築し,必要ならスクリプトをメソッドとして定義する ように設計されている

.

そして文書の内容は

XML

記述される.

スクリプト言語を設計している段階で通常のテキ ストによる言語記述と

XML

による文書記述が非常 に相性が悪いことが観察された. 例えば, XML文書 中にインラインで

JavaScript

コードを挿入する場合 次のような型式で記述しなければならない.

<script type="text/javascript"

language="javascript">

// <![CDATA[

// here goes any JavaScript code

// ]]>

</script>

これは注釈とタグが入れ子の記述で誤りではないが あまり明瞭明晰ではない.

そこでスクリプト言語そのものを

XML

の枠組み で記述すればこの問題を解消することが可能である ことに気がついたので

,

考察を加えて今回報告するこ とにしたものである.

将来には

ScriptXML

Web

ページの標準スクリ プト言語として認められることを期待している

.

3

設計方針

3.1

プログラム木と

XML

原プログラムの内部構造は解析木よりもむしろ プログラム木あるいは抽象プログラム

(abstract program)[5]

として記述される. 実際には演算子を 伴った

2

分木により実装されることが多い. XML この

2

分木上の木構造を忠実に再現すればプログラ ム木の実装は可能である

.

基本的に次のようなタグ があれば充分である.

タ グ 説明

<node> · · · </node>

木構造体

<op> · · · </op>

演算子

<left> · · · </left>

左枝

<right> · · · </right>

右枝

記述は簡潔そのものであるが決して理解し易くは ない.

むしろプログラムの構造を反映するために十分な タグの種類を採用することが望ましい. タグはつぎ のようなプログラム構造の階層にしたがって用意さ れる

.

モジュール, ファイル

関数,クラス

制御構造

変数

具体的なタグについて次節で述べる.

XML

のタグには属性を含めることができるが

,

ログラムの記述には必ず利用しなければならない訳 ではない

.

今回の報告のバージョンではタグの属性 は利用していない.

3.2

言語仕様

タグを定義するためには言語の仕様を確定しなけ ればならない. この報告では少なくとも

JavaScript

の記述の記述能力と同等の機能を備えた言語を想定 した. ただし, もともと

JavaScript

は演算子の種類 にとりとめがないため整理を行った

.

言語はおおよそ次のような仕様を基本にしている.

モジュール, ファイル プログラム単位を定義する.

プログラムの格納を要求する単位にもなって いる.

関数, クラス 関数あるいはクラスを定義する.

変数と宣言 変数は原始型と参照型があり,原始型は 整数, 実数, 文字である. 参照型は関数, 構造

,

配列がある

.

宣言文では初期値を定義しても よい.

制御構造 文列,条件文, 繰返し文,多分岐選択

(3)

日本ソフトウェア科学会第

25

回大会(2008年度)論文集

3

実行文 代入文

,

復帰終了文

,

中断文

,

割込み文 式と演算子 代入, 4則演算, 要素選択,関数呼出し

3.3

タグ定義

具体的なタグの定義について付録に纏めているの でそれを参照してほしい.

4

実装方針

4.1 ScriptXML

処理系の実現

ScriptXML

XML

で記述されているため, 実装 に様々な

XML

支援ツールを利用することができる.

とくに

XML

を解析し木構造表示に変換する,字句処 理や構文解析は実装しなくてもすむはずである. [6]

によれば

XMLHttpRequest

を利用して

XML

を格納 可能なようである.

格納された

XML

データは

JavaScript

のスクリプ トから

XML Document

として参照される. 木構造 として表現された

XML Document

について, 走査 を行ったり変更を加えたりすることができる

DOM (Document Object Model)

ライブラリが備えられて いる

.

このライブラリを使ってインタープリタを実 装することが考えられる.

インタープリタ処理内容は木構造から

RPN

中間 言語を出力する処理と基本的に異ならない

.

中間言 語を出力する代わりに仮想的に実行するとよい.

これらの点を考慮した結果

,

当面

ScriptXML

ブラウザを利用して実装を試みる予定である. 充分 な機能が実現できれば, HyperPageのようなアプリ ケーションに利用することも視野に入れて将来はWeb ページフレームワークに組込むことを検討する.

4.2

エディタ

SriptXML

の問題点はテキストベースのプログラミ

ング言語に比べて可読性が悪そうな点である

. XML

で記述されたテキストは原理的に読みこなすことは できなくはないが, 決して見通しのよい作業ではな い. 高度に入れ子になったタグの対応を理解するこ とはかなり努力が必要そうに見える.

しかし

ScriptXML

は元々木構造になっているため

,

わざわざ

XML

の記述を読む必要はない. 木構造のま ま直接とり使えば問題は解決する. 木構造を表示し 編集するプログラムを構築実装することはインター プリタの構築から見てもそれほど難しくはないよう

に見える. ScriptXMLプログラムを可視的に表示し

た上

, GUI

を経由して

DOM

ライブラリで木構造を

直接触れるようにすればよい.

ScriptXML

の 処 理 系 の 開 発 と 並 行 し て 可 視 型

ScriptXML

編集プログラムも開発を進める予定で

ある.

5

まとめと今後の課題

5.1

現在の状況

本発表では

XML

で記述されたスクリプト言語

ScriptXML

の基本項目について説明した.

現在

ScriptXML

のアイデアを発想してからまだ間 がないため,様々な事項を実際上十分に検討するには 至っていない

.

アイデアの実現可能性のすら深くは 検討していないが, 十分実現性があるものと考えて いる.

本発表の定義にも不充分な点や誤りが存在すると 考えられる. 今後は

ScriptXML

についてさらにアイ デアを深化させるとともに実装についてなんとか実 現を試みる予定である. 数年後には選りすぐれた内 容で報告したく思っている

.

5.2

形式的定義と

DTD

現在の時点では

ScriptXML

は非形式的定義しか存 在しない. XMLを取扱うためにも重要だと考えられ るのでできるだけ早急に形式的定義を完成する予定 である

.

参考文献

[1] W3C, Extensible Markup Language (XML) 1.1 (Second Edition), 2006.

[2] ITU-T Recommendation, X680–X683, Abstract Syntax Notation One (ASN.1), 2002.

[3]

林 恒俊

,

オブジェクト指向に基づくドキュメント創成 プログラム

基本概念

, JSSST-21, 2004.

[4] http://webkit.org/

[5] P. Wegener, The Vienna Definition Language, Com- puting Surveys 4(1), 1971.

[6] D. Flanagan, JavaScript, O’Reilly, 2006.

付録  

SciptXML

タグ定義

この仕様を満たすタグは概ね次のように構成され る. なおこの構成は予備版である.

(4)

日本ソフトウェア科学会第

25

回大会(2008年度)論文集

4

モジュールとファイル モジュールは次のタグで表 示される.

<scriptxml> · · · </scriptxml>

これに関数定義と変数宣言タグが埋込まれる

.

関数定義 関数はタグ<function>と</function>の 間に次のタグをこの順に埋込むことにより定義される.

<name> · · · </name>

<params> · · · </params>

<vars> · · · </vars>

<block> · · · </block>

<name>

関数名を文字列で指定する

<params>

引数宣言で選択項目である

<vars>

局所変数宣言で選択項目である

<block>

関数の本体で

,

制御文や実行文が

埋込まれる

変数宣言 変数はタグ

<vars>

</vars>

の間に次の 宣言記述タグを繰返し埋込むことにより定義される.

<name> · · · </name>

<primitive> · · · </primitive>

<complex> · · · </complex>

<const> · · · </const>

<name>

変数名を文字列で指定する

<primitive>

原始型型名を文字列で指定する

<complex>

参照型で再帰的に宣言記述を埋込

<const>

選択項目で初期値を指定する

<primitive>

<complex>

は排 他的に使われる

制御構造 関数の本体はタグ

<block>

</block>

間に埋込まれた制御文タグによって実行が定義される

.

<if> · · · </if>

<do> · · · </do>

<case> · · · </case>

<if>

タグ

<cond>, <then>, <else>が埋込まれ

る.

<cond>の内容は<expression>と同様であり,

<then>

<else>

の内容は

<block>

と同様である

.

お<else>は選択項目である.

<do>

タグ

<cond>

<block>

がそれぞれ

1

個づ つ埋込まれる

. <cond>

が前方なら

while do

,

方なら

do while

文に解釈される.

<case>

タグ

<expression>, <const>

<block>

対の繰返し,

<otherwise>と<block>対が 1

個埋込ま

れる.

<otherwise>は空要素タグと見なされる.

実行文 タグ

<block>

</block>

の間に埋込まれた

次のタグで表示される実行文によって実質的作業内 容が定義される.

<assign> · · · </assign>

<break> · · · </break>

<return> · · · </return>

<on> · · · </on>

<assign> <target>

<expression>

対を

1

個とり

,

代入操作を表示する

<break>

空要素タグで最内側の繰返しを終

了する

<return>

埋込まれた<expression>を返し

て復帰する

<on>

イベント名と<block>を埋込み,

イベント発生時に<block>を実行 するように宣言を表示する 式と演算子

<expression>

タグに演算子とオペラン ドの式

,

変数や定数を埋込み

,

値を計算する式を定義

する.

<expression>を入れ子に埋込んでもよい.

<op> · · · </op>

<name> · · · </name>

<const> · · · </const>

<op>

演算子をデータに表示し

, 1

個必

要である

<name>

変数参照を表示する

<const>

定数を表示する

演算子は

4

則演算,比較演算,論理値演算,論理演算, 要素参照, 添字演算, 関数呼出し等が必要と思われ る. ほとんどの演算子は

2

項乃至は単項演算子なの

で,

<op>以外の要素は 1

個か

2

個であるが,関数呼出

しでは引数として必要な数の要素を表示する

.

代入文の<target>も内容は<expressiono>とほぼ 同じになる.

参照

関連したドキュメント

自分は超能力を持っていて他人の行動を左右で きると信じている。そして、例えば、たまたま

で実施されるプロジェクトを除き、スコープ対象外とすることを発表した。また、同様に WWF が主導し運営される Gold

対象期間を越えて行われる同一事業についても申請することができます。た

私たちは、私たちの先人たちにより幾世代 にわたって、受け継ぎ、伝え残されてきた伝

という熟語が取り上げられています。 26 ページ

これら諸々の構造的制約というフィルターを通して析出された行為を分析対象とする点で︑構

QRされた .ino ファイルを Arduino に‚き1む ことで、 GUI |}した ƒ+どおりに Arduino を/‡((スタンドアローン})させるこ とができます。. 1)

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から