JPH0455944A - コンパイラの構文解析部の作成方法 - Google Patents

コンパイラの構文解析部の作成方法

Info

Publication number
JPH0455944A
JPH0455944A JP16745890A JP16745890A JPH0455944A JP H0455944 A JPH0455944 A JP H0455944A JP 16745890 A JP16745890 A JP 16745890A JP 16745890 A JP16745890 A JP 16745890A JP H0455944 A JPH0455944 A JP H0455944A
Authority
JP
Japan
Prior art keywords
grammar
parsing
subroutine
syntax analysis
syntactic analysis
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.)
Pending
Application number
JP16745890A
Other languages
English (en)
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 JP16745890A priority Critical patent/JPH0455944A/ja
Publication of JPH0455944A publication Critical patent/JPH0455944A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 [概要] コンパイラの構文解析部の一部をLR(1)構文解析法
で作成する場合の作成方法に関し、複数の文法を単一の
LR(1)構文解析表を用いて解析できるようにするこ
とを目的とし、コンパイラの構文解析部の一部をLR(
1)構文解析法で作成する場合において、LR(1)構
文解析サブルーチンを使用する部分で解析する文法が複
数存在する場合に、LR(1)構文解析サブルーチンを
作成するための文法に、解析する文法の種別を示すトー
クンを挿入することによって、複数の文法を解析するL
R(1)構文解析表を生成しておき(ステップ1)、こ
のLR(1)構文解析表を含むLR(1)構文解析サブ
ルーチンを呼出す際に、解析する文法の種別を挿入する
ことにより目的の文法を解析する(ステップ2)ように
構成する。
[産業上の利用分野] 本発明はコンパイラの構文解析部の一部をLR(1)構
文解析法で作成する場合の作成方法に関する。
[従来の技術] LR(1)構文解析法は、コンパイラの構文解析部を計
算機等で自動生成する上で最も強力で実用的な方法であ
る。ここてLR(1)構文解析法とは、ある文字列を左
から読込み、解釈は右から行い、次の動作を決める時に
は1つ先の語まで読込むという方法である。しかしなが
ら、強力なオブチマイザ(最適化ツール)がない場合に
は、構文解析部を全てLR(1)構文解析法で作成する
と、構文の自動生成ツールとしてのLR(1) 構文解
析表か膨大になってしまったり、解析速度が低下したり
する。
第5図はLR(1)構文解析表の概念図である。
図に示すように「状態」と「語」より構成されており、
ある状態の下である語が来たらどういう処理を行うかが
記載されている。例えば、ある状態のある語とで決定さ
れる図の斜線で示される部分では、以下のような遷移が
行われる。
■1つ語を読んで、状態nに進む。
■1つ語を読んで、それをスタックに積んで状態nに進
む。
■還元処理;例えばA−A+Cという構文規則では、A
+Cを解析して、その結果をAに還元し、同時に+a、
cというコードを生成する。
ところで、ある言語の一部が全てLR(1)文法でなけ
ればならないものではなく、文法によっては、制限が多
いが単純である演算子順位法や、LL (1)構文解析
法で十分な場合もある。演算子順位法とは、+、−、x
、  ÷等の演算子に優先度をつけて構文解析を行うよ
うにするものである。
またLL (1)構文解析法は、ある文字列を左から読
込み、解釈も左から行い、次の動作を決める時には1つ
先の語まで読込むという方法である。
そのため、コンパイラを作成する上で、複数の構文解析
法を混在させることがある。コンパイラの一部をLR(
1)構文解析法で作成する場合、異なる文法要素である
が、それらが互いに関連しあっているため、それらを1
つの構文解析ルーチンで解析するほうが都合がよい場合
がある。例えば、以下に示す3つの文法があるものとす
る。
■文法1(算術式ン E→E+111     (1) ■文法2(条件式) %式%(2) ここで、1は「又は」の意味である。−意名とはデータ
等の固定値を示す。これらの文法を用いて構文解析を行
う場合、それぞれの文法毎にLR(1)構文解析表が必
要となる。ところが上式より明らかなように、算術式に
は一意名を用い、条件式にも算術式を用いている。また
、−意名には算術式を用いている。このように、文法が
相互に関連があることが多い。このような場合、3つの
文法も同一のLR(1)構文解析表を用いた構文解析ル
ーチンで解析したほうが都合がよいことは明らかである
[発明が解決しようとする課題] しかしながら、コンパイラの構文解析部の一部をサブル
ーチンとしてLR(1)構文解析法で作成する場合には
、複数の文法を解析することができないという問題があ
った。このことを詳細に説明する。例えば、今、 i−i+i という文字列が前記文法を満足しているかどうかを調べ
る場合には、第6図に示すようなツリーを作成する。そ
して、最終的にEで終われば前記文字列はLR(1)構
文解析ができることになる。
このような構文解析を行う場合文法GはfvN。
V、、P、S+ なる4つの要素から成り立っている。
VN ; E、T、F等の途中に現れる文字列VT  
: l + −+ 十等の最終的に現れる文字列P;規
則 S、E等の開始記号 ある文法を解析するサブルーチンを作成した場合、最終
的には最初の記号に戻って(る。ところが、文法の種別
(算術式9条件式等)によって開始記号が異なっている
。コンパイラの処理は開始記号まで戻す処理であるから
、開始記号か異なると、単一のLR(1)構文解析表で
複数の文法を解析することができなかった。
本発明はこのような課題に鑑みてなされたものであって
、複数の文法を単一のLR(1)構文解析表を用いて解
析できるようにすることができるコンパイラの構文解析
部の作成方法を提供することを目的としている。
[課題を解決するための手段] 第1図は本発明方法の原理を示すフローチャートである
。本発明は、 コンパイラの構文解析部の一部をLR(1)構文解析法
で作成する場合において、 LR(1)構文解析サブルーチンを使用する部分で解析
する文法が複数存在する場合に、LR(1)構文解析サ
ブルーチンを作成するための文法に、解析する文法の種
別を示すトークンを挿入することによって、複数の文法
を解析するLR(1)構文解析表を生成しておき(ステ
ップ1)、このLR(1)構文解析表を含むLR(1)
構文解析サブルーチンを呼出す際に、解析する文法の種
別を挿入することにより目的の文法を解析する(ステッ
プ2)ようにしたことを特徴としている。
[作用コ LR(1)構文解析サブルーチンを作成するための文法
に、解析する文法の種別を示すダミーのトークンを挿入
して複数の文法を共通に扱えるようにする。例えば、前
記した(1)〜(3)式に加えて、 5−aE I bCl c I   (4)なる文法を
付加するのである。ここで、a、b。
Cがダミーのトークンである。これにより、算術式を示
すEも条件式を示すCも一意名を示す■も共に開始記号
Sに還元されるので、単一のLR(1)構文解析表を用
いて構文解析が行えるようになる。
[実施例] 以下、図面を参照して本発明の実施例を詳細に説明する
算術式1条件式及びデータ名(−意名)を解析するサブ
ルーチンの場合、算術子はデータ名を構成要素として含
み、条件式は算術式、データ名を構成要素して含み、デ
ータ名は添字等に算術式を含むというように、相互に関
連している。このようなサブルーチンを解析する文法を
Gとした場合、文法Gの定義を以下のようにする。
Pは、 G−(VN 、VT 、P、5) VN = (S、 E、 C,11 V↑−((1+  1.−1 C+  )+  a+  b+  01Cがダミー〇ト
ークン S−→aElbclcl E4E+II C→E−E ■→i  (E) ここで、上式のa、  b。
で、それぞれの算術式9条件式、データ名の解析を示す
終端記号である。(5)〜(11)に示す文法を基にL
R(1)構文解析表を作成すると、算術式1条件式及び
データ名を解析するサブルーチンを作成することができ
る。ここで、サブルーチンを作ってみる。
算術式EはEという記号と十という記号とIという記号
又は■という記号で表されるものとし、これを E−E+I I I           (12)と
表すものとする。以下、条件式〇、データ名Iについて
も同様に考え、 C4E−E(13) I−i (E)            (14)と表
す。また、 S′からSが生成されるものと考えて S′→S              (15)という
生成規則を追加する。これら文法において、Eから生成
されるものには例えば i+i+i、i があり、Cから生成されるものには例えばi−i、i+
i−i があり、■から生成されるものには例えば、ii  (
i)がある。
何も読んでいない状態を■。、Ioからaを読んだ状態
をI、、Ioからbを読んだ状態をI2■1からiを読
んだ状態を13とすると、第2図に示すような状態と行
き先を決めるGOTO文(遷移先)が作成される。・は
トークンをどこまで読んだかを示している。これがLR
(1)構文解析表となる。I3の状態で次のトークンが
Cてなければiのオブジェクトコードを生成する。
なお、このサブルーチンを呼び出す場合には、先頭のト
ークンとして算術式2条件式、データ名の先頭のトーク
ンではなく、a、b、cを示すトークンをサブルーチン
に渡すことによって、算術式1条件式、データ名を解析
することができる。
例えばaというトークンをサブルーチンに渡せば、算術
式だと思って解析を始める。またbというトークンをサ
ブルーチンに渡せば条件式だと思って解析を始める。
第3図はサブルーチン内のトークンの読込み処理を示す
フローチャートである。先ず、文字列の読込みが1回目
であるかどうかチエツクする(Sl)。1回目である場
合には、本発明によるダミートークンの付加処理に入る
。つまり、文字列が条件式であるかどうかチエツクしく
S2)、そうであった場合には条件式を示すトークンの
cndを返す(S3)。
次に、条件式でなかった場合には、算術式であるかどう
かチエツクしくS4) 、そうであった場合には、算術
式を示すトークンのartを返す(S5)。次に、算術
式でなかった場合にはデータ名しか残っていないから、
データを示すトークンのdataを返す(S6)。若し
、文字列の読込みが1回目でない場合にはダミートーク
ンを返す必要はないから、読込んだトークンをそのまま
返せばよい(S7)。
第4図は本発明で用いるコンパイラの構成例を示す図で
ある。図において、1は読み込んだ文字列を解析する字
句解析部、2は本発明を特徴づける構文解析部、3は意
味解析部、4は最適化部、5は目的コード生成部である
。構文解析部2は、構文解析本体2a、構文解析サブル
ーチン2b及びダミートークン付加部2cより構成され
ている。
構文解析本体2aには、LR(1)構文解析部は含まれ
ない。構文解析サブルーチン2bでLR(1,)構文解
析が行われる。また、構文解析サブルーチン2bには、
前記したLR(1)構文解析表が含まれる。
このように構成されたシステムにおいて、先ず文字列が
字句解析部1に読込まれる。読込まれた文字列は字句解
釈された後、構文解析部2に入力される。構文解析部2
では入力された文字列の先頭に算術式1条件式及びデー
タ名の種別に応じてその先頭にダミートクン付加部2c
によりダミートクンが付加される。そして、ダミートー
クンが付加された文字列の解析は構文解析サブルーチン
2bで解析され、構文解析本体2aに渡される。
この場合において、全ての文法が同一の開始記号に還元
されるので、共通のLR(1)解析表を用いて解析する
ことができる。
構文解析部2で解析された結果は、次に意味解析部3に
渡され、意味の解析が行われる。その後、最適化部4で
最適化処理がなされた後、目的コード生成部5でオブジ
ェクトコードが生成される。
[発明の効果] 以上、詳細に説明しプこように、本発明によればLR(
1)構文解析サブルーチンを作成するための文法に、解
析する文法の種別を示すダミーのトークンを挿入して複
数の文法を共通に扱えるようにすることにより、算術式
を示すEも条件式を示すCも一意名を示すIも共に開始
記号Sに戻るので、単一のLR(1)構文解析表を用い
て構文解析を行うことができる。
【図面の簡単な説明】
第1図は本発明方法の原理を示すフローチャート、 第2図は状態図とコール文を示す図、 第3図はサブルーチン内のトークンの読込み処理を示す
フローチャート、 第4図は本発明に用いるコンパイラの構成例を示す図、 第5図はLR(1)構文解析表の概念図、第6図は文字
列の解析法の説明図である。 第4図において、 1は字句解析部、 2は構文解析部、 2aは構文解析本体、 2bは構文解析サブルーチン、 2cはダミートークン付加部、 3は意味解析部、 4は最適化部、 5は目的コード生成部である。

Claims (1)

  1. 【特許請求の範囲】 コンパイラの構文解析部の一部をLR(1)構文解析法
    で作成する場合において、 LR(1)構文解析サブルーチンを使用する部分で解析
    する文法が複数存在する場合に、LR(1)構文解析サ
    ブルーチンを作成するための文法に、解析する文法の種
    別を示すトークンを挿入することによって、複数の文法
    を解析するLR(1)構文解析表を生成しておき(ステ
    ップ1)、このLR(1)構文解析表を含むLR(1)
    構文解析サブルーチンを呼出す際に、解析する文法の種
    別を挿入することにより目的の文法を解析する(ステッ
    プ2)ようにしたことを特徴とするコンパイラの構文解
    析部の作成方法。
JP16745890A 1990-06-25 1990-06-25 コンパイラの構文解析部の作成方法 Pending JPH0455944A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP16745890A JPH0455944A (ja) 1990-06-25 1990-06-25 コンパイラの構文解析部の作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP16745890A JPH0455944A (ja) 1990-06-25 1990-06-25 コンパイラの構文解析部の作成方法

Publications (1)

Publication Number Publication Date
JPH0455944A true JPH0455944A (ja) 1992-02-24

Family

ID=15850054

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16745890A Pending JPH0455944A (ja) 1990-06-25 1990-06-25 コンパイラの構文解析部の作成方法

Country Status (1)

Country Link
JP (1) JPH0455944A (ja)

Similar Documents

Publication Publication Date Title
Karlsson Constraint grammar as a framework for parsing running text
Pereira et al. Definite clause grammars for language analysis—a survey of the formalism and a comparison with augmented transition networks
Watson A practical approach to compiler construction
Johnstone et al. Evaluating GLR parsing algorithms
Grishman PROTEUS Parser Reference Manual.
JPH0455944A (ja) コンパイラの構文解析部の作成方法
Jain et al. Compiler Basic Design and Construction
Meijer The project on extended affix grammars at Nijmegen
Su et al. Principles of Compilers
Grigorev et al. String-embedded language support in integrated development environment
JPH07160490A (ja) コーディング支援装置
Sestoft From Concrete Syntax to Abstract Syntax
Scott et al. Multiple lexicalisation (a Java based study)
Whitington Haskell from the Very Beginning
WO1997007452A1 (en) Programmable compiler
Jones et al. Eager GLR parsing
Warren Teaching Prolog through Grammars.
JPH09185623A (ja) 言語処理装置及び方法
JP3370243B2 (ja) コンパイル方法及び装置
JP3141945B2 (ja) コンパイル装置
JPS62245337A (ja) プログラム言語処理方式
Jones et al. L* Parsing: A General Framework for Syntactic Analysis of Natural Language.
Benders et al. Compiler Construction A Practical Approach
Upadhyaya Parsing
Rulifson A TREE META FOR THE XDS 940