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

情報工学科高山泰博 情報工学科安在弘幸

N/A
N/A
Protected

Academic year: 2021

シェア "情報工学科高山泰博 情報工学科安在弘幸"

Copied!
8
0
0

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

全文

(1)

言語翻訳系の生成系 標準MYLANG

       (昭和59年11月29日 原稿受付)

情報工学科高山泰博 情報工学科安在弘幸

The Compiler Generator Standard MYLANG

by Yasuhiro TAKAYAMA

  Hiroyuki ANZAI

      Abstra¢t

  The language processor generator MYLANG developed in our laboratory is described in MYLANG itself and then it is easily augmented, extended and improved by means of reproduction on an enlarged scale. Thus, the studies applying it to various areas from simple programming languages to complex natu.

ral languages have made the MYLANG have vari皿s versions, which are now alive in our laboratory.

  The recent researches for them introduced a standardization as a compiler generator in a necessarily simplified version, This paper reports the system, that is, Standard MYLANG, by summarizing the inter.

nal structure, the operation mechanism and the requirement specification for inputs. And, a generation of the extended PL/O compiler is shown as an example of the practical applications.

       生成例を示す。9)

 1.まえがき

       2.標準MYLANGシステムの構成  我々の研究室では,言語処理系の自動生成のための

ツールとして,言語処理系の生成系MYLANGを開発   標準MYLANGの動作の概要を図一2 1に示す。標準 した。1)これは,半線形代数2)を基礎としたオートマト  MYLANGの入力は,生成されるコンパイラが受理す ン・モデルによる記号処理系の実現の研究に始まり,註4)  るプログラム言語の文法を定義するための属性付RTF いくつかの改良・拡張を経て現在に至っている。5Σ6)し   (α)と,それに意味解釈を与えるための活動ルーチン かし,機能増強を行うに連れて,システム全体が大掛か   (β)とから成る。

りなものとなり,開発者である我々にとっても,その保   まず,図一2.1の左側の列に沿って説明する。受理さ 守が困難となって来た。そこで,本報告では  れた属性付RTFは,逆ポーランド記法(Reverse Pol−

MYLANGシステムをプログラム言語のコンパイラ生  ish Notation:RPN)に変換(a)される。次に・RPN 成用ツールと見なして整理し,標準MYLANGとして  変換された構文規則から・有限オートマトンの合成(b)

規定したシステムの内部構造と動作機構とを説明する。  を行う。ここで合成されたオートマトンは,非決定性で すなわち,標準MYLANGはコンパイラ生成系,伝統  あり・冗長さを含んでいる。そこで・この有限オートマ 的にはコンパイラ・コンパイラと呼ばれているものであ  トンに対して簡約決定性変換(c)を施し,決定性の有限 る。2章でMELCOM COSMO 8001皿上の標準  オートマトンを構成して・冗長さを取り除く。このよう MYLANGのシステム構成を説明し,3章では属性付  に,翻訳の動作をオートマトン的に捕らえてコンパイラ       へ

正規翻訳記法(Attributed Regular Translation Form  を生成することが標準MYLANGの特徴の一つである。

:属性付RTF)7)と活動ルーチンからなる入力仕様を述   ここまでのオートマトンは・計算機内部では・主記憶上 べ,4章において標準MYLANGによるコンパイラの  にリスト構造として表現されている。このリスト構造を

(2)

44      高山泰博・安住弘幸

(a)

      に表現し,これを標準MYLANGの入力として与える

(α) 属性付正規  活動   (β)

  翻訳記法  ルーチン      だけで,システムの細部を知ることなく希望のコンパイ    〆/     \\      ラを得ることができる。標準MYLANG自身も標準

灘憂裏ンド 醐ルーチン(β)(,) MYLANGにより生成されているため・その本体部分・

(b》オ_トマトン       形をしている。オートマトンのリスト構造から中間コー   の合成

      ドへの変換は,いったん内部中間コード(LMD, OBJ)

↓縮一}すな____,。)の

        ↓

(c) 簡約決定性

  変換

(d) オートマトン   の中閤コード   表現

(e) 動作支援機構

実行支援   (9)

ルーチン

     (β)

活動ルーチン (f)

呼出機構

(h》

      となった後,図一2.2③のプログラムにより,動作支援       機構(図一2.1(e))で解釈実行可能な中間コード

(i)     (TRN)となる。

       活動ルーチンはPASCAL 8000に沿って記述される。

      標準MYLANG計算機(図一2.1(i))は,一つのPAS−

      CALプログラムとなって, PASCAL 8000コンパイラ       によりコンパイルされ,リンカにより実行時ライブラリ       と結合されて,MELCOM上で直接実行可能なロー       ド・モジュールとなる。その様子が図一2.2の下部に示     MELCOM COSMO 800(IID      されている。図一2.2において下線が施されている()

      内の名前は、具体的なファイル名を表す。

    図一2.1標準MYLANGの動作概要

       3.標準MYLANGの入力要求仕様 したオートマトンを直接利用して,データ構造の制御に

従って入力テキストの比較を行い,構文解析を実現する   属性付RTFと活動ルーチンとの組は, RTFプログ 方式も考えられるが,8)標準MYLANGではリスト構造  ラムと呼ばれる。 RTFプログラムを標準MYLANGに から中間コード表現(d)に変換する。そして,この中間   与えて生成される言語処理系は,属性付構文指示翻訳系 コード化されたオートマトンを動作支援機構(e)で解釈   (attributed syntax,directed translator)7)である。本章 実行させることにより構文解析を行う。4)        では,標準MYLANGの入力要求仕様であるRTFプロ  次に,図一2.1の右側の列を説明する。利用者が定義  グラムについて説明する。

した活動ルーチン(β)は,属性付RTF(α)中の活動    3.1.正規翻訳記法

記号と対応する名前を持つ活動ルーチンを呼出すため   標準MYLANGでは,構文(変換)規則の表現のた の呼出機構が生成され,付加される(γ)。更に,(γ)  めに,拡張BNFの変形である正規翻訳記法(Regular はシステムが準備している実行支援ルーチン(9)や,   Translation Form:RTF)10 L 3 M)を使用する。 RTFは,,

中間コード化されたオートマトンをシミュレートするた   1個以上の めのdriverと呼ばれるルーチン(h)と結合され,完全な

プ。グラムとしての形が整い(・),ホスト計鱗の上で  A=α・      (1)

動作する。実行支援ルーチン(9)とdriverルーチン(h)  という形をした定義(方程)式から成立つ。各定義式は,

とは,動作支援機構(e)を構成する。      左辺をその右辺で定義していると見なされる。RTFの  図一2・1(i)の部分を標準MYLANG計算機と呼ぶ。  構成要素は、非終端記号,終端記号,および活動記号の 標準MYLANG計算機はスタック機械の一種である。  3つである。これらは,それぞれ超言語記号「〈〉」,「・・」,

図一2・1(a)〜(d)の処理を行う部分をオートマトン・  「川」で囲んで区別する。すなわち,任意の記号列8 ジェネレータと呼ぶ㍗       に対して,〈5>は非終端記号,Yは終端記号,181は  標準MYLANGのシステム構成を,別の観点から眺  活動記号であることを表す。

めたものが図一2・2である。利用者は,生成しようとす   非終端記号の集合をN,終端記号の集合をT,活動記 るコンパイラの動作の仕様を構文 意味規則の形で静的  号の集合を△で表し,Σ=TUNU△とする。ただし,

(3)

       入カデータ       出力結栗

        梨、:隠:(_,

        画清τ㊥ 〔ヅ

       コ         ロ

        H[cOH  i AT‥iイ巡)

       1 : 2..L、

       1    い

       しエロロニエロ     ち

(,YS,C)一 

(㎜) @ (、,SI、,)

       回

        回 …剛㊥

図一2.2標準MYLANGのシステム構成

T∩N=T∩△=N∩△=φであるとする。定義式は,   以下に,RTFによる簡略化された英語の文法定義の 非終端記号Nのすべての要素,つまりRTFプログラム  例を示す。

中に現れるすべての非終端記号に対して存在しなければ   〈文〉=〈名詞句〉〈動詞句〉∵10kay 1;

ならない。また,定義式の右辺は,Σ一正規表現10川Dで     〈名詞句〉=e  *〈冠詞ジ   *〈名詞〉;

なければならない。Σ一正規表現の定義を以下に示す6      〈冠詞〉=ぐA ;

 [定義(Σ一正規表現)]       〈名詞〉=ぞRABBIT +℃ARROT   (i)Σの要素は,Σ一正規表現である。      〈動詞句〉=t  *〈動詞ジ   *〈名詞句〉;

  (ii)α,βがΣ一正規表現であるとき,α+β,αβ・,     〈動詞〉=EATS ;

    α*およびα/は,Σ一正規表現である。      このRTF(2)により受理される英語文は,

    (αβはα・βの省略)

  (iii)(i),(ii)を有限回適用して生成されるも    ARABBIT EATS A CARROT・

    のだけが,Σ正規表現である。        δ   (兎は人参を食べる。)(3a)

 ここで,超言語記号「+」,「・」,「*」,「/」は,そ    ACARROT EATS A RABBIT・

れそれオートマトンの和(or),連接(concatenation),    (人参は兎を食べる。)(3 b)

閉包(closure),選択可(option)の演算に対応して    A RABBIT EATS A RABBIT・

おり,図一2.1(b)では,オートマトンの合成のための演     (兎は兎を食べる。)(3c)

算子としての役割を果たしている。これらの演算子の結    ACARROT EATS A CARROT.

合の強さ(演算の順位)は,強い方から閉包・選択可,     (人参は人参を食べる。)(3d)

連接,和の順である。なお,超言語記号「(」と「)」と  の四つである。(3a),(3b),(3c),(3d)は,構文 を使って,演算の順序を変更してもよい。すなわち,  としては正しい。

「(」と「)」も,Σ一正規表現に加える。

(4)

46      高山泰博・安住弘幸

 3.2.属性付正規翻訳記法      活動記号において,属性の値を直接計算する(算術代入  標準MYLANGは, RTFが意味属性(semantiと する)ことを許すようになった。また,属性の値(文 attribute),または単に属性(attribute)と呼ばれるパ  脈)により生成規則の適用を変更する規則分割(rule

ラメータを持つことを許す。この属性を使用することに  splitting)7い1)の機能を導入した。これらの記述方法を より,構文で意味を定められる事項に関して,構文記法  以下に示す。

(ここでは,RTF)を拡張し,意味解析の処理を静的   1(X:=X+Y)1      (5a)

に記述するために,属性文法(attribute grammar)の  1?(x=Y)1∀+1?(x<>Y)1?b (5b)

概念を取り入れている。      ここで,X, Yは,属性生起変数である。

 3・2・1・属性       3.2.3.属性付RTFの例

 属性とは,構文規則に付加した意味情報のことである。  RTFに対して,3.2.1,3.2.2で示した拡張を施し 標準MYLANGでは, RTF中の非終端記号と活動記号  たものを総称して属性付RTFと呼ぶ。これを用いて(2)

とが,属性を持つことを許す。属性には,相続属性  の文法定義を書き直してみる:

(inherited attribute)と合成属性(synthesized attri−  〈文〉=〈名詞句(/X)〉〈動詞句(/Y)>

bute)との二種類がある。相続属性は,構文解析木の     (1?(x>Y)川okay}

上から下(根から葉)へと値が決まる。合成属性では,     +1?(X<=Y)llFailD;

下から上(葉から根)の方向へ値が求まって行く。相続    〈名詞句(/X)〉=‥*〈冠詞〉‥*〈名詞(/X)〉;

属性と合成は,プログラム言語における値引数,変数引    〈冠詞〉=W;

数にそれぞれ対応する。      〈名詞(/x)〉=RABBIT 1(x:=9)1  RTF中の属性の記述方法を以下に示す。       +℃AR ROT 1(X:=1)1;

  〈N(∫1パ・・…・㍍/8‥8・・…・8・)〉(4a)      〈動詞句(/Y)〉=・,*〈動詞〉・・*〈名詞句(/Y)〉;

  1・4(∫1,↓2,…,㍍/81,82,…,8η)1(4b)      〈動詞〉=tEATS

 ここで,Nは非終端記号名, Aは活動記号名である。  この属性付RTF(6)により受理される英語文は(3a)

f.,0<エ<〃2,S.,0<y〈ηは,それぞれの記号  のみである。(3a)〜(3d)の英語文の意味を考えてみ の相続属性の生起(occurence),合成属性の生起を示  ると,(3a)は実際にありえることだが,(3b)〜(3d)

している。系列τ1,τ,,_,↓mは相続属性生起並び,  は現実にはおそらく起り得ないだろう。属性付RTF(6)

8,,8,,_,8.は合成属性生起並びと呼ばれる。た  では,2行目で属性の値による条件判断が行われて,意 だし,標準MYLANGでは1≦功,η≦10とする。属  味の解釈がなされている。

性をプログラム言語の引数と対応させて,(4a)が   属性付RTF(6)を,名札付有向グラフで表現したもの RTF中の左辺にあるときは仮引数,(4a),(4b)が  を図一3.1に示す。この名札付有向グラフは,属性付 右辺にあるときは実引数と考えることができる。     RTFに対応する有限オートマトンとして考えることが  属性を持つ非終端記号および活動記号は,次のような  できる。図一3.2に属性付RTFと拡張BNFとの比較を示 ブラック・ボックスと見なすことができる。すなわち,  す。

名前(非終端記号名,活動記号名)がそのボックスを指   3.3.入力形式

定し,相続属性生起が入力,合成属性生起が出力を与え   標準MYLANGの入力(RTFプログラム)は,属性 るようなブラック・ボックスである。このブラック・  付RTF (RTF部)と活動ルーチン(ACT部)とから ボックスの内部構造は,その非終端記号を左辺として持  構i成される。図一3.3(a)にRTFプログラムの構成例,

つ定義式の右辺や,その活動記号名と同じ名前を持つ活  図一3.3(b)にRTFよる形式的定義を示す。

動ルーチンで記述される。      利用者の定義する各活動ルーチンは,PASCAL 8000  3・2・2・属性による計算と規則分割      に従って記述され,標準MYLANG計算機の中の一つ  従来,活動記号とは,RTFからの活動ルーチン(意  の手続きとして組込まれる。活動ルーチンの構成を図一3 味付けルーチン)呼出しを表すものであった。RTF中   4に示す。活動ルーチンについての基本事項は以下の通 の非終端記号,活動記号に属性を追加したのに応じて,   りである。

(5)

       〈

      も等○.⇒v⑰,呉9讐.

       已ヅ

図一3.1属性付RTF(6)に対する名札付有向グラフ

         邊性付RTF・ 拡張BNF       (*?RTF*)

{iiii∴㌍三, i曇:鷲∵ 諜∵:∵:1∵∴:1:∵1;]一

(4)反復  .    *      { }   0回以上の繰返し      (*?ACTlON*)

篇,・,∴慧1蒜ご・ ご{‖1;ト…__、 ]…

       (結合の強さの変更)      (*?END*)

(7)終端記号            1

(8)非終端記号  .、 (超言1裡弓が終端鵬に含まれるときのみ)       (a購成例   (9)醐蹄  ll・ 無 活鋤一チン名と対応    、RTFブ。グラ。、。〈制御部〉〈渤部〉;

  (10)属性     ( / )    無    非柊端記号と活動記号とに         〈制御部〉ピ1*?RW*)・<属性付RTF>・(*?END£:),;

       付加できる       〈属性付RTF>=以下に示す。

       〈活動部〉; 1*?ACT【ON:c} 〈大∫6i宣て部×活動f続き〉::: (*?END;::[ ;

     図一3.2属性付RTFと拡張BNFとの比較  、      〈大域宣言部〉・P・scal宣言部{・同じ・

      〈活動ア続き〉・〈活動手続き頭部〉<活動手続き本体アポ;

      〈活動手続き頭部〉= ↓*1 <活動記艘× f 〈属性生起仮引数並び〉 )/ 1訂

  1)活動ルーチン名は,属性付RTF中の活動記号名    〈醐手続き本体〉=Pas a1のプ゜ツク↓こ同じ;

と対応する。RTF内部に現れる(3.2.2.の拡張を除   く!㌫鏡長㌫慧き霧蕊㌻‡欝漂元和〉*;

      ノ

いた)すべての活動記号に対して・ACT部に対応する   〈灘麗蒜蓑灘灘㌫麟㌶霧㌍㌶;壷壷仮引雛び〉,

活動ルーチンが存紅なければならない・    ,。続。幽仮,,数並㌫㌶灘㌶灘㌫。。性生起仮,数,,,、

  2)宣言部aは,すべての活動ルーチンを通じて使用    〈合成腐性生起仮引数並び〉=く合成属性生起仮引数〈相続属性生起仮引数〉・〈属性生起変数〉;〉(∵〈合成属性生起仮引数〉)*;

される全域的な定数,型,変数,関数,手続の宣言を行     く㌶麗㌶爵監霊㌶竺い

う。       〈定義本体〉=〈定義項>Cピ〈定義項〉ぬ・

      〈定義項〉=〈定義因子×定義因子〉‡;

  3)宣言部bは・その活動ルーチン内だけで使用さ    く慧㌶:;1巖6灘 ご〈◆ソ )/;非終端記号〉.〈活動記号,..c<定義本体>T、

れる定数,型,変数,関数,手続の宣言を行う。        濃嬬霧;二:1繋終嶽i㌫>1,(,属性生起実引鍵び〉γ〃.〉.、

  4)実行文部には,その活動ルーチンの活動内容(動     礪性生起矧数並び〉=〈相続属性生起鶏1数並び〉ソ 〈含成属性生起期1数並び〉/

       + グ〈合成属性生起実引数並び〉;

作)を記述する。      〈相続属性生起実引数並の=〈相続属性生起実引数〉↓∵〈相続属性生醸引数〉)*;

       〈相続属性生起実引数〉=〈属性生起変数〉◆〈整数〉;

  5)標準MYLANGでは,最低1個の活動ルーチン     〈合成属性生起矧賊び〉=〈合成属駐起矧数〉(∵〈合頗性生起矧数〉〕*;

       〈合成属性生起実引数〉=〈属性生起変数〉;

・が必要である。       、       』 〈活動記号〉・叩順顕髄〉( c〈属性生起実引雛び〉 )/

       命〈算術代入文〉・〈条件式〉い1  RTF(2),属性付RTF(6)では,理解を助けるために非.    〈算術代入文〉= c〈離生起変数〉 :; 〈醐式〉 ) ・        〈算術式〉=〈算術項パCぺ◆ )〈算術項〉)*;

終端記号に漢字を使用しているが,実際には非終記号名,     〈鮒項〉二〈算術因子〉(ぽい/ k飾因子〉胎       〈算術因子〉=㌔ソ〈算術要素〉;

活動記号名および属性生起変数名は,10文字以内の英字      〈鮪要素〉・〈属駐起変数〉・〈撒〉・,( 〈酬式〉 )1・

      〈条件式〉= ?C〈算術式〉ド= 〈算術式〉・ {〈算術式〉いピ〈算術式〉)

で始まる英数字でなければならない。また,終端記号も         いく (〈算術式〉い・ 〈算術式〉・ 〈鞘式〉)川 有効なのは10文字までである。       (b)形式的定義

 標準MYLANGでは入出力用の手続きが準備されて     ・ 図一3.3 RTFプログラムの構成

(6)

48      高山泰博・安住弘幸

(*?ACTION*)       パイラの仕事は・いくつかの相に分けて考えることがで   _      きる。ここでは,字句・構文解析と意味解釈・コード生  宣盲部a

       成という大まかな二つの分類をして,被生成コンパイラ

(*1活動ルーチン名1*)

  宜言部b

BEGIN

実行文部

END:

+    にこれらの機能を組み込む方法を示す。ここで例として      用いた言語はPASCALの設計者Wirthにより設計され      たプログラム言語PL/0を拡張したものである…)本章 を通じて用いられる手法は,段階的詳細化(stepwise refinement)である。

 4.1. 字句・構文解析

      (*?END*)      標準MYLANGが取り扱う言語のクラスはLL(1)で    注)+は1回以上の繰返しを表す。      ある1)MYLANGによるコンパイラの生成例としては,

       minLBASICなどがあるが12)・7)これらはLL(1)ではな      図一3.4 活動ルーチンの構成

       かった。PL/0を採用した最初の理由は,それがLL(1)

いないので,図一3.5に英文字列と数値の処理例を完全  で設計されていることである。LL(1)クラスの言語に対 なRTFプログラムの形で示す。 char型の変数CH[1]は   しては字句・構文解析器(parser)をRTFを用いて一 一番最後に読み込んだ文字が入っているシステム変数で  度に表現することができる。図一4.1に,RTFによる ある。      PL/0の文法記述を示す。図一4.1のRTFプログラムを

4.標準MY、ANG 、よるコンパイラの生成  標準MYLANGシステムの入力として与えることによ        り,得られた出力がPL/0のparserとなる。この  本章では・実際に標準MYLANGシステムを使用し  parserは,入力テキストを単なる記号の並びとして扱い,

て生成したコンパイラの作成過程について述べる。コン  それが規則通りであるかどうかを調べるだけである。

(w RTF染[      (宗?RTF*)

〈FACTOR>; *(〈IDENT>IXOUTPUT(1/)1+<NUHBER>IXOUTPUT(2/〕1);      〈PROGRAH>=<HEADING>〈BLOCκ〉 IENDCOHPILEI;

<1DENT>;〈ALPHA>IRESETID[((<ALPHA>+〈NUH>[ISETIDI)*;       〈HEADING>= PRO〔iRAH 〈IDENT><SFNICOLON>;

〈NUHBER>=<NUH>IRESETNHRI↓〈NUH>ICALUCNHRI)*;       〈BLOCK>=〈CONSTBLOCK>*〈VARBLOCK>■

〈ALPHA>=<ALPH1>◆〈ALPH2>;       〈PROCDCLARE>*〈STATEMENTPART>;

〈ALPHI>= A ◆ B ◆ C ◆ D ■ E ◆ F ◆ G ◆ H ◆1 令 」 4 K ◆ L + H ;      〈CONSTBLOCK>= 吉 CONST 〈IDENT>〈EOUAL><NOHBER>

〈ALPH2>= N ◆ 0 ◆ P + 0 + R 今 S + T や U ■V9+ U + X + Y ◆ Z ;      (〈CO凹HA><IDEkT>〈EOUAL><NUHBER>} 〈SEHICOLON>;

〈NUH>二0 1 23 4 5 6 7 8 9;      〈VARBLOCK>=   * VAR 〈IDENT>

(*?END*}      (〈COHHA>〈IDENT>)*<SEH[COLON>:

(字?ACTION*)      〈PROCDCLARE>= * PROCEDURE〈IDENT>

TYPE  ALFA10=PACKED ARRAY[1..]010F CHAR;       〈SEHICOLON>〈BLOCK>〈SEHlC〔〕LON>:

りAR       <STATEHENTPART>=〈COHPOUND>;

  ID:ALFA10;       〈COHPOUND>= * BEOIN 〈STATEHENT>

  IDX:INTEGER;       (〈SEMICOLON><STATEHENT>)吉 # END ;   NHR:INTEGER;       〈STATEHENT>;〈CALLSTHNT>◆〈UHILESTHNT>

(字IRESETIDI*)      ◆〈IFSTATEHENT>◆〈COHPOUND>◆〈ASSIGNHENT>;

BE61N ID:; ; ID[1::二CH[1]; IDX;=2 END;      〈CALLSTHNT>= CALL <IDENT>;

      <U}IILESTHNT>=(‡ISETIDI字)        字 DO <STATEHENT>; UHILE ■〈CONDITION>

8EGIN IF IDX〈=10 THEN ID[IDX〕:=CH[1]; IDX:=IDX◆1 END;       〈IFSTATEMENT>= IF ±<CONDITION>

       (字IRESETNHRI字)       <ASSIONHENT>=〈IDENT>〈BECOHES>〈EXPRESSION>; THEN 〈STATEHENT>;

BEGIN NHR:ニORD(CH[1])−ORD( 0 ) ENO;       〈CONDITION>エ ODD 〈EXPRESSION>

       ◆<EXPRESSION> *( <EXPRESSION>

(ホICALUCNHRI*)       + <EXPRESSIOH>

BEGIN NHR:=10零NHR.(ORD(CH[1])−ORD( O )) END:       + = 〈EXPRESSION>

{±IXOUTPUT(X/)1*)      +〈EXPRESSION>)

BEG1N       ← 〈EXPRESSION>

CASE X OF       +〈EXPRESSION>));

 1:URITELN(  .,.IDENTIFIER = [ ,ID, ] );       〈EXPRESSION>= 字( ◆ ◆ 一 )/

 2:VRI↑ELN( ..、NUHBER = ,HNR:5);      <TERH>( + 〈TERH>+ <TERM>)⊥

END       <TERH>=〈FACTOR>( 吉〈FACTOR>◆ 〈FACTOR>} : END;       〈FACTOR>ニ〈IDENT>+〈NUHBER>◆ 〈EXPRESS∫ON> )

(■?END‡)      〈IDENT>=*〈ALPHA>(〈ALPHA>◆〈NUH>}*;

      〈NUHBER>= *<NljM><NUH>*;

      <SEHICOLON>= * ;

(零?RTF#)      〈EOUAL>=

〈NUHBER>= ☆〈NUH>INUH1(/X}1(〈NUH>「CALCU(X/X)1)*IPRINT(X/)1;      〈COHHA>;

〈NUH>=0 1 2 34 5 6 7 8 9;       〈BECOHES>= * : = ;

(*?END零)      〈ALPHA>=<ALPHI>呼〈ALPH2>+<ALPH3>;

(‡?ACTION字)      <ALPH1>= A B +C ◆D ◆E ぐF ■G 令H+ 1

(零INUHI(/X}1*)      〈ALPH2>=J K◆ぞL M N 0P0R BEGIN X:=ORD(CH[1])−ORD↓ 0 ) END;       <ALPH3>= S ◆ T 今 U + V ◆ W ◆ X ◆ Y¶◆ Z + ;       〈NUH>= O 1 2 3 4 5 6 7 8 9

(*ICALCU(X/Y)1■)      (窃?END*)

BEGIN Y:=10*X楡〔ORD(CH[1;)−ORD( 0 )) END;      〔*?ACTION■)

       {*IENDCOHPILE1*)(*lpRINT↓X/)1君}       BEGIN URITEL}{; URITELN(  ...END COHPILE..,) END;

BEGIH 冒RITELN( NUHBER= ,X:1) EHD;      (*?END治)

{*?END#)

図一3.5 標準MYLANGにおける文字列と数値の処理       図一4.1 PL/0の構文解析器

(7)

この操作は,論理学において最初にwff(welLformed  考えると, wffに解釈を与えたものに相当する。図一4.

formula)を定義することに類似する。         3に属性付RTFによるプログラム言語PL/0のコンパイ  4.2.意味解釈・コード生成      ラの記述を示す。

 前節で得られたparser(図一4.1)に対し,意味解釈

       〈ビHILESTHNT>; 冒HILE IPRESERVEI *〈CONDITION>IJPCUHILEl およびコード生成を行うための活動ルーチンを追加する。         DO <STATENENT>IBACKJUHPI・

コンパイラが行う翻訳の仕事のうち,解釈や意味付け,   翻!IE灘儲{・CX、 p2・・p2・1 END、

そして出力の作業は前節で示した構文的な認識ほどには   ;il{ICI賠i;ll.CX、 p3,.p3.1、 GEN(JpC,0,0)END、

形式化が容易ではない。ここでは,既に作成された   ;il!{Clll甥1{、GEN(JMP,0.CX2[p2])、

       P3:=P3−1; CODE[CX3〔P3]].ADDR:=CX parserを変更することなく,追加あるいは重畳によって   END・

段階的にコンパイラを完成させることを考える。図一4.      (・)while文 2(a)にwhile文,図一4.2(b)に条件式に対する活動

       〈CONDITION>= ODD 〈EXPRESSION>IGENOPR〈6/)1

ルーチンを組込んだ属性付RTFを示す。図一4.2(b)で       +〈ExPREssIoH> *1:;:{!1!漂1;ll;}II漂1{1;}lg,)1        ピゴくロア ロだ べ    ロロロ  ロヨハ 

は,同じ形をした活動ルーチンの呼出し(活動記号)に      ..〉.1寧職品賠ぽ惜ll;;創},1 おいて,相続属性を使用することで,複数の活動ルーチ ,__,、_,__∵〈EXPRESSI°N>IGEN°PRU2/)1 ンを定義することなく,ただ一つの活動ルーチンの記述   B!IllXく・CXHAX THEN

       ほロい だけで済んでいる。同様に,活動記号,活動ルーチンを    1]1!Cll!![CXI DO BEGIN F Cフ=Xl LEVLこ=Y;ADDR:=Z END;

       り 

組込むことで,順次,機能を付加して行く。活動ルーチ   ぷ;EWRITELN〔 PROGR^H TOO LONG川 ) ンを組込んだRTFは,前節で述べた論理学との対比を  ;譜INI認ll}1;IN)END、

(b)条件文

図一4.2 RTFと活動ルーチン

(零?RTF☆)

〈PROGRAH>=〈HEADIH〔i>IIN1TIALIZEI〈BLOCK> IENDCOHPILEI;

〈HEADING>= PROGRAH 〈IDENT>〈SEHICOLON>;

〈BLOCK>言IBしOCKINITI<CONSTBLOCK>*〈ΨARBLOC藍〉欲〈PROCDCLARE>零    lPRECODEI〈STATEHENTPART>1〔ENOPR(0/)llLISTCODEI;

〈CONSTBLOCK>= ξ CONST <IDENT>〈EOUAL>〈NUHBER>IENTER(1/)1

     (〈COHHA>〈IDENT><EOUAL>〈NUHBER>IENTER(1/)1)■〈SEHICOLON>;

〈VARBLOCK>= VAR 〈IDENT>IENTER(2ノ)1

    (〈COHHA>〈IDEN↑>IENTER(2/)1)欲くSEHICOLON>;

〈PROCDCLARE>= PROCEDURE 〈IDENT>IENTER(3/)1

     〈SE図ICOLON>ILEりELUPI<BLOCK>ILEVELDOWN「〈SEHICOLON>;

く  ハ ピけ ド  ハロ  コくじロけ む ほ  ハ

1;謬㍑;二、;㍑㌫1;91語1譜1{lii!1㌫ll;㌫漂;瑞繍1!ND     ◆<READSTHNT>φ〈VRITESTHNT>

    ◇〈COHPOUND>◆〈ASSI(iNHEN↑〉;

<CALLSTHNT>= CALL 〈IDENT>IGENCALLI;

<UHILESTHNT>= 冒HILE IPRESERVEI°  宕〈CONDITION>IJPCUHILEl       DO 〈STATEHENT>IBACK』UHPI;

<IFSTATEHεNT>=  °富 IF 治<CONDITION>IJPCIFl       THEN 〈STATEMENT>

     (,  ELSE°〈ELSEPART>+IFIXUPIFI};

〈ELSEPART>=IELSEPI〈STATEHENT>|FIXUPIFI;

<REPEATSTHNT>=  書■ REPEAT IREPEATHEADl      〈STATEHEHT>(〈SEHICOLON>〈STATEHENT>)

       ‡ UNTIL 吉〈CONDITION>IUNTILCODEI;

〈READSTHNT>= READLN 金( IGENIOP(0!)1<IDENT>ICHECKAI |OENSTOI;

〈WRITESTHNT>= 9RITELN 〈FACTOR>,) IGENIOP(2/)1;

〈ASSIGNHENT>=〈IDENT>ICHECKAI〈BECOHES>〈EXPRESSION>10ENSTOI:

〈CONDITION>= ODD 〈EXPRεSSION>16ENOPR(6/)1

    ◆〈EXPRESSION> 零(°=,〈EXPRESSION>10ENOPR(8/}1        ◆ 〈EXPRESSION>10ENOPR(9/)1       ◆ =°〈EXPRESSION>16ENOPR(13/)1       ◆〈EXPRESSION>IGENOPR(10/}|)

       ◆°〉°( 〈EXPRESSION>10ENOPR(11!)1       ◆〈EXPRESSION>IGENOPR(12/}1));

<EXPRESSION>=1(X:=O)1 含(°◆ ◆°一゜1(X:=1)1)!

     〈TERM>(1?(X=1)lIGENOPR(1/}1◆|?(X<>1)1)

       ( <TERH>16ENOPR(2!)1        ◆ 一゜〈TERH>|CENOPR(3/)1)零:

〈TERH>=〈FACTOR>( 〈FACTOR>IGENOPR(4/)1       ◆曹/°〈FACTOR>|OENOPR(5/)1)■;

〈FACTOR>エ〈IDENT>10ENFACTI◆〈NUHBER>ILITERALI◆ 〈EXPRESSION>

〈IDENT>=  °含〈ALPHA>IRESETIDI((〈ALPHA>◆〈NUH>)ISETIDI)零;

〈NUH8ER>:  ,±〈NUH>IRESETHHRI(<NUH>|CALUCNHR|)零;

〈SEHICOLON>=

〈EQUAL>言゜ ポ=°:

〈COHHA>= 零 , ;

〈BECOHES>= $ :° =

〈AしPHA>=〈ALPH1>◆〈ALPH2>;

〈ALPH】〉= A°◆ B ◆ C ◆ D,◆°E ◆ F°◆C ◆°H,◆ 1 J K ◆L ◆H

<ALPH2>= N ◆°0け◆,P°守,0,◆°R,◆ S°◆T ◆U V U°◆VX◆°Y Z ◆_

<NUH>= 0 ◆ 1 ◆ 2 φ 3 ◆°4 ◆ 5◆°6 7°◆8 ◆9

(■?END#)

図一4.3拡張PL/0コンパイラの属性付RTF

(8)

50        高山泰博・安住弘幸

      参 考 文 献

 5.あとがき      1)竹中豊弘:・言語処理系の自動生成に関する研究        一MYLANGシステムの開発、,昭和57年度九工大卒業論文  一口に言語処理系と言っても,4章で示したようなプ    (1g83).

ログラム言語のコンパイラから,自然言語処理を含めた   2)安在他:べ半線形代数・・第1報〜第8報

       電子通信学会技術報告AL 80−60,61,62, AL 81−4,5,

広い意味での記号処理系まで様々なものが考えられる。   38,醜74(1g81).

言語処理系の生成系MYLANGの目標は,少しでも広   3)山之上他:べ記号処理系のオートマタシステムによる実

い範囲の対象を取り扱えるようにすることにある・実際㍍霊㌔籔艶自麗㌻ス翌それを用、、

に,MYLANGシステムに対する種々の拡張とその応   た言語処理系の開発。,九工大研究報告N・・45, PP・35−42

用が試みられている:) 13 14) 15) @   5)(1982石川)◆他、,言語処理系の生成系MY。ANGの算法と  本報告では,MYLANGの機能を,コンパイラ生成   データ構造を考慮した処理速度の向上.,九工大研究報告 系として必要十分な機能だけに絞って仕様設定を行った   N°・48・PP・39−45(1984)・

      6)藤村 他:ミ言語処理系の生成系MYLANGにおける標 標準MYLANGシステムの解説を行った。標準化の作   準活動記号を用いた制御文の翻訳、,九工大研究報告N。.48,

業はシステムの固定化につながるという危険を秘めてい   pp・57−65(1984).

るカ㍉ここでの標準化は,処理系全体の軽量化を図って鴛莞遵㌫罐雅規翌群鷲雰文向き翻

見通しを良くし,その発展に寄与することを前提とした   8)Wirth, N.(片山訳):ミアルゴリズム+データ構造=プ ものである。また,言語においては,その機能拡張は慎   ログラム・・第5章「言語構造とコンパイラ」・日本コン        ピュータ協会(1979).

重であるべきだと考える。       9)高山他:・言語処理系の生成系MYLANGによる翻訳  標準MYLANGを使用することで,容易に系統的な・  系の自動生成・・第37回電気関係学会九州支部連合大会論文        集,p.48,昭和59年10月.

方法でコンパイラを生成することができた。また・段階   10)安在,潮崎:・再帰降下順序変換機械系とその生成機械,,

的に機能を増強することができた。(PL/0に対するre・   電子通信学会論文誌,63−D,9, pp、771−778(N・v.1980).

㌫㌫㌔蕊㌫灘誉・::耀lli灘繕巖1ご究

標準MYLANGの使い易さの向上のために,動的解析   一mini・BASICの実現を例として・・昭和57年度九工大卒業        論文(1983).

ツールなどの組込みを検討している。       13)川村信宏:・言語処理系の自動生成に関する研究  最後に,本報告はこれまで行われてきたMYLANG   一変数の型の拡張・・昭和58年度九工大卒業論文(1984)・

システムの開発についての最初の総括であることを言己し14Q生㌫實壁露㌶籔黙㌻G㌶㌶

て,この研究に携って来られた研究室の方々に感謝の意    (1984).

を表する・       15L罐纂涙鑑㌶i麟紫鷲鍵(1984).

      16)渡避俊雄:ミ言語処理系の生成系に関する研究

       一Pascal S翻訳系の自動生成、,昭和59年度九工大卒業論文       (1985).

参照

関連したドキュメント

各 種リ ン脂 質誘 導体 にっ いて 機能 性評価 を行 った 。特 にヒ ト癌 細胞 株を 用い た増 殖抑 制試 験やDPPH ラジカル捕捉能、酸化安定性を指標に、抗癌作用

   第4 章では,各 PTF 上でのデータの分布から各 PTF

そこで本研究では、言語能力レベル別の語彙・構文 的特徴(Text Profile)を分析し、その特性を明らか

本研究では、情景画像の一つである平積みされた雑誌カラー画像を処理対象とし,雑誌の背文字列を基に

プログラミング言語 Ruby •  概念を理解するためにプログラミング演習を行う –  手段であり目的ではない –  簡単に試せるのも情報関係の特徴 •  プログラミング言語

プログラミング言語 Ruby •  概念を理解するためにプログラミング演習を行う –  手段であり目的ではない –  簡単に試せるのも情報関係の特徴 •  プログラミング言語

 今年度に至り,情報科学センターにSUNのX端末が

設計に基づいて C 言語でプログラミン グを行った。その後、プログラムを Lego