JPH03269733A - コンパイル装置 - Google Patents

コンパイル装置

Info

Publication number
JPH03269733A
JPH03269733A JP7006390A JP7006390A JPH03269733A JP H03269733 A JPH03269733 A JP H03269733A JP 7006390 A JP7006390 A JP 7006390A JP 7006390 A JP7006390 A JP 7006390A JP H03269733 A JPH03269733 A JP H03269733A
Authority
JP
Japan
Prior art keywords
parenthesis
parentheses
closing
intermediate code
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP7006390A
Other languages
English (en)
Other versions
JP3141945B2 (ja
Inventor
Kazuhiko Noba
和彦 野場
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP02070063A priority Critical patent/JP3141945B2/ja
Publication of JPH03269733A publication Critical patent/JPH03269733A/ja
Application granted granted Critical
Publication of JP3141945B2 publication Critical patent/JP3141945B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概  要〕 同一の括弧を複数の意味に使用するプログラミング言語
を解析するコンパイラの構文解析方式に関し、 コンパイラ作成や保守時の作業効率を向上させた構文解
析方式を提供することを目的とし、同一の括弧を複数の
意味に使用するプログラム言語を解析しコンパイルする
コンパイラにおいて、前記解析に先立って、始め括弧を
検出した時その中間コードを出力するとともに該中間コ
ードの位置をスタック状に積み、終わり括弧を検出した
時その直後に現れた語又は前記左括弧との間に現れた語
によってその括弧の種別を求め、該種別に対応した終わ
り括弧の中間コードを出力するとともに前記位置情報を
スタックから降ろすとともにその位置の始め括弧を終わ
り括弧と同じ種別の括弧に書き換えるように構成する。
〔産業上の利用分野〕
本発明はコンパイラに係り、更に詳しくは同一の括弧を
複数の意味に使用するプログラミング言語を解析するコ
ンパイラの構文解析方式に関する。
〔従来の技術) 近年、プログラミング言語の多様化に伴いC0BOL等
の古い言語においても積極的に新しい概念を取り込む傾
向にある。例えば、 MOVE   A   To (P)→B (P)→C
・・・■ MOVE   A   To  (P)→D (E)・
・■ 等の命令がある。このような命令は一般の翻訳法例えば
演算子順位法、LL (1)構文解析法、LR(1)構
文解析法等を用いて行っている。
C0BOLにおいては前述■の命令ではPでポインタづ
けしており、その後にポインタづけされたBが存在する
。そしてさらにPでポインタつけしその後にポインタづ
けされたCが存在している。
これらの°“(”、 “)パはポインタを指示するカッ
コである。また前述■の命令ではPでポインタづけして
おり、その後にポインタづけされたD(E)が存在する
。この時の(E)は添子のカッコを表している。このよ
うにC0BOLにおいては括弧は添字、式、部分参照、
ポインタに用いられる。
〔発明が解決しようとする課題〕
前述したC0BOLにおいて通常のプログラミング言語
はその構文のほとんどが文脈自由文法で記述することが
でき、LR(11文法を用いれば■等の構文解析ができ
る。しかし一種類の括弧が複数の意味を持つようになる
とLR(1)文法では解析できなくなる。そのため従来
においては大部分で一般の翻訳法(演算子順位法、LL
(1)の構文解析法、LR(1)構文解析法)で記述し
ているにもかかわらず、一部を効率の悪いアルゴリズム
で記述する必要があった。LL文法は左から順番に解析
していく方法である。括弧が全部同じであると、その括
弧が何の括弧か不明である。このため翻訳が出来なくな
ってしまう。例えば■の命令文のように、最終の(E)
は添え字の括弧であるが、この括弧を従来のLL法によ
って解析した場合、同じ括弧が使われているためポイン
タづけなのか添え字なのかがわからなくなってしまって
いる。とくに古い言語であるC0BOL等においては、
括弧は“(”及び“)”しか使用できない。それにもか
かわらず括弧を使用した方法が追加され一種類の括弧で
複数の意味を表す必要が生じている。これによりコンパ
イラの解析部にとっては非常に重い負担となっている。
従って、統一された解析アルゴリズムで記述することが
できずコンパイラ作成時の作業効率の低下、保守性の低
下等の問題を生じていた。
本発明は上記従来の欠点を解決し、コンパイラ作成や保
守時の作業効率を向上させた構文解析方式を提供するこ
とを目的とする。
[課題を解決するための手段及び作用]本発明は同一の
括弧を複数の意味に使用するプログラミング言語を解析
しコンパイルするコンパイラにおけるものである。
前記コンパイラの解析に先立って、第1のパスで始め括
弧が存在した時に、その始め括弧を中間コードとして出
力するとともに、その出力した格納位置をスタックに一
時記憶する。そして終わり括弧を検出した時、その括弧
の直後に現れた語または始め括弧との間に挟まれた語に
よってその括弧の種別を求め、その種別に対応した終わ
り括弧の中間コードを出力するとともに、同時に前記始
め括弧を格納した位置情報から、その始め括弧を終わり
括弧と同じ種別の括弧の中間コードとして変換する。そ
して第2のバスで構文解析を行う。
本発明によって同一の括弧でも複数の意味を持たせるこ
とができるとともに構文解析を簡単に行うことができる
。
〔実  施  例〕
以下図面を用いて本発明の詳細な説明する。第1図は本
発明のコンパイラの構成国である。本発明の実施例にお
けるコンパイラにおいては構文解析部(1)1、構文解
析部(■)2、コード生成部3、字句解析部4よりなる
。このコンパイラでは意味解析は構文解析部で行ってい
る。
構文解析部(1)でデータ定義等の構文・意味解析と手
続きの初期解析(中間コード化)を行い、構文解析部(
■)2で手続きの構文・意味解析を行う。尚構文解析部
(■)1と字句解析をパス1、構文解析(■)2をパス
P2、目的コード生成部3をパスP3と呼ぶ。各パスの
間は、中間コードを用いて前のパスの出力結果を後のパ
スに伝える。
構文解析部(1)では始め括弧すなわち左括弧が現れる
とその中間コードを出力するとともに、その中間コード
の位置をスタック上に格納する。
すなわちスタック上に積む。そして終わり括弧が現れる
と、その直後に現れた語または始め括弧との間に現れた
語によってその括弧の種別を決め、その種別に対応した
右括弧の中間コードを出力する。同時に位置情報をスタ
ックから降ろし、その位置の始め括弧を終わり括弧と同
じ種別の括弧に書き換える。その結果構文解析部(■)
2は異なる意味を持つ括弧は全て異なる記号コードとし
て認識することができる。本来LR(1)構文解析法等
では解析できない文法でも構文解析部(■)2で解析す
ることができる。尚、第1図には設けていないが必要に
応じて構文解析部(■)2と目的コード生成部3の最適
化部を設けてもよい。
第2図は本発明の実施例のプログラミング言語の記述例
を示す図である。当言語はC0BOLの拡張した定義で
ある。■はポインタ修飾子の括弧、■は添字の括弧、■
は部分参照の括弧である。この言語は従来のLR(1)
構文解析法等では解析できない。
構文解析部(I)1はこれらの文字列のトークンを読み
込み、第4図に示すアルゴリズムを用いて第3図に示す
中間コードを生成する。
構文解析部(1)は先ず■の左括弧を読み込み、左括弧
の中間コードを生威しくこの時点では括弧の種別は添字
としておく)、中間コードの格納アドレスをスタックに
積む。その後、■に対応する右括弧を読み込んだときに
、スタックからアドレス情報を降ろし、次のトークンが
右矢印であるので左括弧をポインタ修飾子の左括弧に変
更し、ポインタ修飾子の右括弧の中間コードを生威する
。
続いて、■の左括弧を読み込み、左括弧の中間コードを
生威しくこの時点では前述と同様に括弧の種別は添字と
しておく)、中間コードの格納アドレスをスタックに積
む。さらに、順次トークンを読み■の左括弧に対応する
右括弧を読み込んだときにスタックからアドレス情報を
降ろす。そして次のトークンが右矢印ではないので、左
括弧は変更せず、添字の右括弧の中間コードを生威する
。
さらに■の左括弧を読み込み、左括弧の中間コードを生
威しくこの時点では括弧の種別は添字としており)、中
間コードのアドレスをスタックに積む。その後コロンを
読み込んだ時点で左括弧を部分参照の左括弧の中間コー
ドに書き換え、アドレス情報の代わりに部分参照情報を
スタックに積む。最後に、■に対応する右括弧を読み込
んだときに、スタックから降ろした情報が部分参照情報
であるので、部分参照の右括弧の中間コードを生成する
。
以上のようなアルゴリズムにより対応する括弧を目的と
する括弧のコードに変換することができる。
第4図は本発明の実施例のアルゴリズムの説明図である
。−bile no文から原始テキストの終わりend
迄の繰り返す処理を開始(beg in)する。
先ず次のトークンを読み込む。さらにCASE文で、読
み込んだトークンを判別する。左括弧“(”であるなら
ば、左括弧の位置情報をスタックに積み、読み込んだト
ークンを添字の左括弧のトークンに置き換える。またコ
ロン“:″であるならば、スタックから位置情報を降ろ
し、その位置の中間コードを部分参照の左括弧のコード
に書き換え部分参照情報をスタックに積む。また右括弧
“)”であるならば、スタックの最上位の情報を降ろす
。
そしてCASE文によりスタックから降ろした情報を判
別する。部分参照情報であるならば読み込んだトークン
を部分参照の右括弧のトークンに置き換える。また位置
情報であり、もし次のトークンが右矢印であるならばそ
の位置の中間コードをポインタの左括弧のコードに置き
換える。そして読み込んだトークンをポインタの右括弧
のトークンに置き換える。またさもなければ(すなわち
次のトークンが右矢印でない)読み込んだトークンを添
字の右括弧のトークンに置き換える。そして処理を終了
する。
以上のような動作により目的の対応する括弧が、目的の
処理を指示する括弧に変換することができ、従来のシス
テムを用いた解析を行うことにより、コンパイラとして
のオブジェクトプログラムを得ることができる。
以上本発明の実施例を用いて、詳細に説明したが、本発
明はC0BOLに限ることなく、他の方法における構文
解析にも応用することができる。
〔発明の効果〕
以上述べたように本発明によれば、同一の括弧を複数の
目的に使用しても、その終わり括弧(右括弧)の前後し
た文字コードによって、それらのどの目的の処理の括弧
であるかを求めることができるとともにその括弧の目的
の括弧のコードに変換するので、コンパイラの作成が簡
単になる。また、本来LR(I)構文解析等の既存の効
率のよいアルゴリズムでは解析できない方法であっても
、第1パスで、LR(1)構文解析法による表現への変
換が行えるので、構文解析をすべて統一したアルゴリズ
ムを用いて記述できるとともに、それによって開発効率
の向上、保守時の向上をばかにことができる。
【図面の簡単な説明】 第1図は本発明の実施例のコンパイラの構成図、第2図
は記述例を示す図、 第3図は中間コードを示す図、 第4図は本発明の実施例のアルゴリズムの説明図である
。 1・・・構文解析部(1)、 2・・・構文解析部(■)。 3・・・目的コード生成部、 4・・・字句解析部。

Claims (1)

    【特許請求の範囲】
  1. 同一の括弧を複数の意味に使用するプログラム言語を解
    析しコンパイルするコンパイラにおいて、前記解析に先
    立って、始め括弧を検出した時その中間コードを出力す
    るとともに該中間コードの位置をスタック状に積み、終
    わり括弧を検出した時その直後に現れた語又は前記左括
    弧との間に現れた語によってその括弧の種別を求め、該
    種別に対応した終わり括弧の中間コードを出力するとと
    もに前記位置情報をスタックから降ろすとともにその位
    置の始め括弧を終わり括弧と同じ種別の括弧に書き換え
    ることを特徴とする構文解析方式。
JP02070063A 1990-03-20 1990-03-20 コンパイル装置 Expired - Fee Related JP3141945B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP02070063A JP3141945B2 (ja) 1990-03-20 1990-03-20 コンパイル装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP02070063A JP3141945B2 (ja) 1990-03-20 1990-03-20 コンパイル装置

Publications (2)

Publication Number Publication Date
JPH03269733A true JPH03269733A (ja) 1991-12-02
JP3141945B2 JP3141945B2 (ja) 2001-03-07

Family

ID=13420710

Family Applications (1)

Application Number Title Priority Date Filing Date
JP02070063A Expired - Fee Related JP3141945B2 (ja) 1990-03-20 1990-03-20 コンパイル装置

Country Status (1)

Country Link
JP (1) JP3141945B2 (ja)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61216039A (ja) * 1985-02-13 1986-09-25 Fujitsu Ltd プログラム生成制御方式

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61216039A (ja) * 1985-02-13 1986-09-25 Fujitsu Ltd プログラム生成制御方式

Also Published As

Publication number Publication date
JP3141945B2 (ja) 2001-03-07

Similar Documents

Publication Publication Date Title
US6477641B2 (en) Method for translating between source and target code with heterogenous register sets
US7711685B1 (en) Method and system for an extensible macro language
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
CN109491658A (zh) 计算机可执行代码数据的生成方法及装置
US7010476B2 (en) Method and apparatus for constructing finite-state networks modeling non-concatenative processes
KR20020070809A (ko) 포스트-링크 코드 최적화
CN118760437A (zh) 多语言前端翻译成网络安全专用编译器的yak字节码的方法
RU2115159C1 (ru) Способ и устройство для проверки использования полей записей во время компиляции
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
KR20090011974A (ko) 컴파일 대상 파일 추출 방법
Angelov et al. PGF: A portable run-time format for type-theoretical grammars
Koskimies et al. The design of a language processor generator
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
US8341607B2 (en) Condensing pattern matcher generation for intermediate language patterns
Zhu Denotational semantics of programming languages and compiler generation in PowerEpsilon
JP3141945B2 (ja) コンパイル装置
JP3003459B2 (ja) プログラム作成支援装置
JPH05143356A (ja) コンパイラ装置
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JP2861630B2 (ja) 接続構造解析器
WO1997007452A1 (en) Programmable compiler
Lam Practical Performance Enhancements to the Evaluation Model of the Hazel Programming Environment
JP2001034482A (ja) コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体
JP3190377B2 (ja) 関数名変換装置
JPH0385639A (ja) プログラム言語翻訳機

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees