JPH0281230A - 構文解析および言語処理システム - Google Patents

構文解析および言語処理システム

Info

Publication number
JPH0281230A
JPH0281230A JP63232376A JP23237688A JPH0281230A JP H0281230 A JPH0281230 A JP H0281230A JP 63232376 A JP63232376 A JP 63232376A JP 23237688 A JP23237688 A JP 23237688A JP H0281230 A JPH0281230 A JP H0281230A
Authority
JP
Japan
Prior art keywords
indentation
information
rules
program
syntax
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
JP63232376A
Other languages
English (en)
Inventor
Ichiro Kushima
久島 伊知郎
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP63232376A priority Critical patent/JPH0281230A/ja
Priority to US07/408,750 priority patent/US4989145A/en
Publication of JPH0281230A publication Critical patent/JPH0281230A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明はプログラミング言語処理システムにおける構文
解析方式およびそれを利用した言語処理システムに関す
る。
〔従来の技術〕
従来、コンパイラ等で行われている構文解析処理では、
構文エラーを含んだプログラムを入力した場合でも、エ
ラーを検出した時点で解析処理を終了してしまうのでは
なく、構文エラーの起こった状況に応じて、プログラム
のある範囲を読み飛ばしたり、プログラムに適当な字句
を挿入するなどのエラー回復処理をして解析処理を続行
しようとする。この手法については、例えば、コンピュ
ータ・ランゲージ、ヴオリューム9.ナンバー1(19
84年)、第51頁から第67頁(Comprtar 
 Language、  Vol、9  、  No、
1(1984)、pp、5l−67)に記載がある。
これら従来の方法では、構文エラーが検出された時に、
どのような回復処理を行うか、即ちどのような字句が現
れるまでプログラムを読み飛ばすか、あるいはどのよう
な構文要素を補って解析を続けるかということについて
は、言語の構文規則に基づいて決定している。
〔発明が解決しようとする課題〕
上記従来技術においては、エラー回復の方法を決定する
上で、プログラムのインデンテーション(字下げ2段付
けとも呼ばれる)の付は方については考慮されていなか
った。
一般に自由書式と呼ばれているプログラミング言語、即
ち、構文上、字句と字句の間で自由に改行や空白の挿入
を行なえるプログラミング言語では、プログラムの読み
易さを向上させるために、与えられたプログラムに対し
て、どのようなインデンテーションを行うべきか、即ち
、どこで改行して行の初めにどれだけの空白をいれるか
(インデントをするか)ということを、プログラマの方
で決めていることが多い(そのような規則は構文上、定
められていないにもかかわらず)。例えば。
PASCALのようなブロック型言語では、ブロックの
始めと終りを表すbeginとend、およびそのブロ
ックに属する文月は同一インデントで書くとか、複数の
ブロックがネストしているときは内側のブロックはど右
側に寄せて書く(インデントを大きくする)とかいう規
則がそれである。その結果、ある規則に従ってインデン
テーションを付けてあれば、たとえ構文エラーを含んだ
プログラムであっても1人間にとっては、プログラムを
書いた人の意図するところを推測することができた。
ところが一般のコンパイラ等で用いられている構文解析
ではこのような情報を利用することがなく、的外れなエ
ラー回復をすることがあった。
本発明の目的は、構文エラーを検出した時、プログラム
のインデンテーションの状態に関する情報を利用して、
エラーから回復する方法を提供することにある。
さらに、プログラムに構文エラーが含まれてなかった場
合でも、インデンテーション規則違反があった場合には
、そのプログラムは誤りを含んでいる可能性が多い。本
発明の他の目的は、そのような誤りを検出してユーザに
警告する機能を持つ言語処理システムを提供することに
ある。
〔課題を解決するための手段〕
上記目的を達成するため、本発明の構文解析方式では、
解析対象のプログラミング言語のインデンテーション規
則を記憶する記憶手段と、入力プログラム中の各字句が
どれだけインデントされているかを表す情報を記憶する
記憶手段とを有し、プログラム中に構文エラーが検出さ
れた時に、構文規則の他に、上記情報と上記規則に基づ
いてエラーからの回復方法を決定する。
また、本発明の言語処理システムでは、解析対象のプロ
グラミング言語のインデンテーション規則を記憶する記
憶手段と、入力プログラムが上記規則に従っているかを
判定する判定手段と、上記判定に基づいて、規則に従っ
ていない場合にメツセージを出力する出力手段を有する
〔作用〕
本発明においては、構文解析部は、入力信号もしくは入
力信号を切り分けてできたトークンのほかに、そのトー
クンがプログラム上でどれだけインデントされているか
という情報を受は取る(たとえばトークンの開始位置)
、そして、その情報をスタック等の記憶手段に記憶しな
がら構文解析を行い、構文エラーを検出した時は、その
情報とインデンテーション規則に基づいてエラー回復の
ために行う処理を決定する。このため、プログラムのイ
ンデンテーションの付は方に応じたエラー回復の方法を
とることが可能である。また、これに、入カドークン列
がインデンテーション規則に従っているかを判定する判
定手段とメツセージ出力手段を設けることにより、イン
デンテーション規則に違反していた場合に、警告メツセ
ージを出力することができる。
〔実施例〕
本発明の実施例を第1図から第11図を用いて説明する
第1図は、本発明の構文解析方式を適用したコンパイラ
のブロック構成図である。なお、このコンパイラは本発
明の言語処理システムの実施例ともなっている。即ち、
構文的には正しくともインデンテーション規則に従って
いないプログラムに対してはエラーメツセージを出方す
る機能を有する。
ソースファイル1はコンパイルすべきプログラムを格納
している1字句解析部2がこれを読み出して、入力記号
例を、最小の意味単位であるトークンに切り分け5 ト
ークンキュー3に入れる。構文解析部4は、構文解析用
スタック5と、標準となるインデンテーション規則を記
憶したインデンテーション規則表6を用いながら、トー
クンキュー3内のトークン例について構文解析を行ない
、中間コードを生成する。その際、構文エラーやインデ
ンテーション規則違反を検出した時は、必要に応じてエ
ラー回復処理を行ない、エラー情報をメツセージファイ
ル7に出方する。コード生成部8は、構文解析部4から
渡された中間コードをオブジェクトコードに変換し、オ
ブジェクトファイル9に出力する。また、インデンテー
ション規則表6の内容は予めインデンテーション規則表
生成部11がインデンテーション規則ファイル1oを読
み出して作成しておく。
第2図は、本実施例のコンパイラの処理するプログラミ
ング言語の構文規則をB NF (Back us−N
aur F orm)で表わしたものである。BNFの
意味やその説明で用いられる用語については中田育男著
「コンパイラ」第3章に記載されている。
第3図°は1本実施例のコンパイラの処理するプログラ
ミング言語のインデンテーション規則を構文規則ごとに
表示したものである。インデンテーションの仕方は、各
記号の右肩に付けた数字によって示されている。数字は
インデンテーションのレベル、即ちその記号を行の先頭
からどれだけインデントして書くべきかを表わしていて
、数が大きいほど大きくインデントする(右側に寄せて
書く)ことを意味する。ただし、これらの数字はBNF
の左辺の記号のインデンテーションレベルからの相対的
なレベル差を表わしているものである。例えば、第3図
(11)の規則は、beginとendのインデンテー
ションレベルを、〈文〉のそれと等しくし、〈文月〉の
インデンテーションレベルをそれよりも1段大きくする
ことを意味する。
なお、右肩に数字が付いていない記号は、それらの記号
が行の先頭に来てはいけないか、それらの書かれる位置
については規制しないことを意味する。インデンテーシ
ョン規則表6には第3図で示されている情報が予め記憶
されている。
次にトークンキュー3について第4図を用いて説明する
。トークンキューはF I FO(FirstIn F
irst 0ut)方式の記憶領域であり、字句解析部
2で切り出したトークンを構文解析部4へ渡すのに使わ
れる。トークンキューの各要素は、トークンとそのトー
クンのインデンテーションレベルを表わす数字の対でで
きており1例えば第4図(a)のようなプログラムを字
句解析部2が処理した場合、トークンキューの中身は同
図(b)のようになる、この図でインデンテーションレ
ベルを示すフィールドが「−」になっているのは、その
トークンが行の先頭にないことを意味している。
次に構文解析部4について第5図〜第11図を用いて説
明する。
第5図は構文解析部4のモジュール関連図である。構文
解析部は通常処理部41、エラー処理部42、中間コー
ド生成部43の3つの部分から成っている。入カドーク
ン列が構文規則に従っている間は通常処理部で構文解析
を行ない、適当な時点で中間コード生成部を呼出して中
間コードを生成する。一方、入カドークン列に構文的な
誤りがあって解析をこれ以上正常に進めることができな
くなった場合はエラー処理部42が呼び出される。
エラー処理部では通常の構文解析が再開できるように構
文解析用スタック5またはトークンキュー3の内容に変
更を加え、適当なエラー情報を出力し、しかる後に通常
処理部に制御を戻す。
第6図は通常処理部の処理の手順のフローチャートであ
る。ここでは、碑文解析の手法として、上向き(bot
to■−up)構文解析の中の、一般にシフト・リデュ
ース(shift−reduce)法と呼ばれている方
法を用いている。この方法の詳細、および用語について
はエイホ他著[プリンシプルズ・オブ・コンパイラ・デ
ザイン」に記載されているので、ここでは本発明の特徴
となる部分だけを説明する。
まずステップ61で、トークンキュー3が空であるかを
調べ、空の場合はさらにステップ62で構文解析用スタ
ック5が空であるかを調べ、空であれば入カドークン列
がすべて解析できたので処理を終了する。スタック5が
空でない場合は構文エラーであるので、エラー処理部4
2を呼出す(ステップ66)、 トークンキュー3が空
でない時は、その先頭のトークンを見て、そのトークン
がシフト可能か否か、またはそのトークンによりリデュ
ース可能か否かを調べる(ステップ63)。
どちらも可能でないときは構文エラーであるのでやはり
エラー処理部を呼び出す。シフト可能であるときはステ
ップ64で、シフト操作、即ち、キ二一の先頭トークン
をトークンキューより取り出し、それを構文解析用スタ
ック5にブツシュする操作を行ない、ステップ61に戻
る。一方リデユース可能の場合はステップ65に進み、
リデュース操作、即ちスタックトップの記号列を、その
記号列を生成するBNFの左辺の非終端記号で置き換え
る操作を行なう、そしてステップ67で中間コード生成
部43を呼出し、同様にステップ61に戻る。エラー処
理部の処理が終ったときも同様にステップ61に進んで
処理を繰り返す。
ステップ64でシフト操作をする場合は、単にトークン
キューから取り出した要素(トークンとそのインデンテ
ーションレベルの対)をそのままスタックにブツシュす
ればよいが、ステップ65のリデュース操作の場合は、
リデュースする記号列がインデンテーション規則に従っ
ているかをチエツクし、従っていない場合は、エラー情
報を出力する。これを第7図を用いて説明する。
いま、構文解析用スタックの内容が第7図(a)に示す
ような状態であり、キューの先頭要素がendであった
とする。この時はリデュース操作が可能である。即ち、
スタック中のifから〈文〉までの記号列を第2図のB
NFの(14)の規則を用いて1つの〈文〉にリデュー
スすることができる。このとき、ifから〈文〉までの
並びが第3図のインデンテーション規則(12)にも合
致しているかをチエツクする。すると、インデンテーシ
ョン規則(12)の方では、ifとelseのレベルが
等しく、二つの〈文〉のレベルがそれよりも1段大きく
なければならないといっている。実際のスタックの方は
それらレベルがそれぞれ3,3,4゜4であるのでこの
規則に合致することがわかる。
そこで全体の〈文〉のレベルが3であると計算され、リ
デュースの後は第7図(b)のような状態になる。一方
、構文解析用スタックの内容が第7図(c)に示すよう
な状態であれば、同様にリデュース可能であるが、イン
デンテーション規則には反していることがわかる。この
場合はウオーニングメツセージがメツセージファイル7
に出力される。
次にエラー処理部42の処理について、第8図のフロー
チャートを用いて説明する。まず、ステップ81で、正
しいプログラムトークン列の候補集合を生成する。これ
は、現在解析中の入カドークン列と少しだけ異なるトー
クン列が、プログラマの意図する正しい入カドークン列
であるという仮定に基づいて、そのような、いわば正し
いプログラムの候補となるトークン列の集合を、現在の
トークンキューと構文解析用スタックの内容を基にして
求めるものである。具体的には、トークンキュー中のト
・−クン列を tt  tz  t、  t4 ・・・と表わした時(
txが先頭)、(i)t、の前に別のトークンtを挿入
する、(n)tlを削除する、(iii) t、を別の
トークンtに置換する、(iv )t2とtlを交換す
る。(v)t工とt2を合わせて1つのトークンとする
1等の方法で生成することができる。既にトークンキュ
ーの中から取り出してしまって、トークンキューの中に
はないトークンについても、構文解析用スタック5に積
まれた内容から、トークンキューの内容をある程度復元
することができるので、上記のような変更を行なうこと
は可能である。なお、生成される候補の数を抑えるため
に、公知例で挙げた文献の中に様々な手法が記載されて
いて、本実施例でもそれを適用することができる。
次にステップ82で、候補の中から、最適と考えられる
ものを選出する。この選出方法については、元のトーク
ン列から、正しいトークン列へ変更するための変更コス
トをコスト関数によって計算し、このコストが最小のも
のを選ぶことによって行なう。コスト関数の定め方は、
例えば、各トークンに対して、そのトークンを挿入する
コストや削除するコスト等を予め決めておき、変更に要
するこれらの操作(挿入・削除)のコストの和を全体の
変更コストとする方法が知られている0本実施例では、
これに加えて、生成したトークン列がインデンテーショ
ン規則に従っているかどうかという評価を行ない、イン
デンテーション規則に従っていない場合にはコストが高
くなるようにして、インデンテーション規則に従うよう
な変更が優先して選ばれるようにする。
次にステップ83で1選ばれたトークン列を処理する状
態になるようにトークンキュー3と構文解析用スタック
5の内容を変更し、M後にステップ84で構文エラーが
検出されたことと、その結果どのようなエラー回復処理
をしたかを、エラー情報としてメツセージファイル7に
出力する。
次にこの処理の例を第9図と第10図を用いて説明する
。第9図のプログラムは第2図の構文規則で示されるプ
ログラミング言語で書かれたものであるが、構文エラー
を含んでいる。プログラミング経験を持つ人間であれば
、インデンテーションの付は方から、エラーの原因が、
第10行のendに対応するbeginが無い、という
ことを容易に推測できる。しかし、プログラムを先頭か
ら見ていく通常の構文解析では、第10行のendは第
4行のbeginに対応しているとみなされ、従って第
11行のcallを見た時点で初めてエラーを検出する
。よって、本実施例の構文解析部ではこの時点で、制御
が通常処理部41からエラー処理部42に移される。エ
ラー処理部ではまずステップ81で正しいプログラムト
ークン列の候補を生成する。
これらを第10図に示す、ただしこの図では見易さのた
めトークン列の形ではなくプログラムの形で書き、また
プログラム全体を示した。この場合生成される候補集合
は、第11行以降のトークンをそっくり削除したもの(
第10(a))、第10行のendを削除したもの(同
図(b))、第9図の前にbeginを挿入したもの(
同図(C))、第8図の前にbeginを挿入したもの
(同図(d))等からなる。次にステップ82で、これ
らの変更コストを求める。いま変更コストを、トークン
1つ当たり、挿入、削除とも1であるとすると、(a)
〜(d)の変更コストはそれぞれ5,1,1゜1となる
。さらにインデンテーション規則に照らし合わせてみる
と、(a)は第3図の規則の(11)と(15)に、(
b)と(c)は規則(15)に反しているのに対し、(
d)は規則に合致している。これらの結果から(d)が
最終的に選ばれることになる0次にステップ83でトー
クンキューと構文解析用スタックの内容を、(d)を処
理しようとする状態に戻す、最後にステップ84で、構
文エラーを検出したがbeginを挿入して解析を続行
したという旨のエラーメツセージを出力して処理を終了
する。
第9図〜第10図で示した例からもわかるように、本実
施例によれば、プログラムを構成するトークンの一次元
的な並びだけではなく、インデンテーションの付は方も
エラー回復の手掛かりとするので、構文エラーに対して
よりキメ細かい対処が可能である。特にプログラムがイ
ンデンテーション規則に従って書かれていれば、構文エ
ラーが起こったときも、確実に、プログラムを書いた人
の意図に近い形にプログラムを復元して構文解析を続け
ることができる。さらに、先程示したように本実施例に
よれば、構文規則に従っていても、インデンテーション
規則に違反したプログラムに対しては警告を与えること
ができる6例えば第11図(a)に示すプログラムは構
文的にはエラーを含んでいないが、第9行がインデンテ
ーション規則に反している。これを書いた人は、 wh
ile文によって繰り返されるのは第8行と第9行の2
行であるということをインデンテーションによって示し
たかったのかも知れないが、従来のコンパイラでは、そ
うは解釈してくれず1while文で繰り返されるのは
第8行のみで、第9行はそれに続いて1度だけ実行する
文だとみなす0本実施例のコンパイラでは、このような
プログラムに対しては例えば第11図(b)のような警
告メツセージが出され、プログラマに注意を促すことが
できる。
もちろん、このようなメツセージを出す機能は。
コンパイラのオプションとして、抑制するようにするこ
とも可能である。
なお、本実施例では、通常時の構文解析の手法として上
向き構文解析法の中のシフト・リデュース法を用いてい
たが、本発明はこれに限定されるものではない0例えば
、同様に構文解析用スタックを用いて行なう、非再帰的
下向き構文解析(non−recursive  to
p−down parsing)法を用いても実現でき
る。この場合、本実施例と同様に、構文解析用スタック
の要素を、トークンとそのインデンテーションレベルの
対で表わされるようにしておけば、プログラムのインデ
ンテーションの状態を把握しておくことができ、本実施
例と同様にインデンテーション規則に従うようなエラー
回復を行なうことができる。
また、本実施例では、エラーからの回復方式として、入
カドークン列に適当な修正を施して正しい(と予想され
る)プログラムを復元し、構文解析を続行する方法をと
っていたが、本発明はこれに限定されるものではない0
例えば、下向き構文解析法でよく用いられる、一般に、
パニックモード回復法またはフォローセット回復法(詳
しくは公知例として挙げた文献を参照)と呼ばれている
エラー回復法にも適用できる。これらの方法は、エラー
を検出した場合、解析処理を再開する契機となるトーク
ンの集合を求め(これらのトークンは同期トークンとも
呼ばれる)、入カドークンがその集合に含まれていない
間は、そのトークンを読み飛ばしくスキップし)、その
集合に含まれるトークンが現われた時点から、構文解析
を再開するものである。本発明を適用した場合は、同期
トークン集合はトークンとそのインデンテーションレベ
ルの対を要素として持つ。即ち、エラーを検出した時、
単にあるトークンが現われるまでプログラムをスキップ
するのではなく、あるインデンテーションレベルを持つ
ような、あるトークンが現われるまでスキップするので
ある。その結果、同じトークンであってもそのインデン
テーションレベルによって構文解析再開後の処理が変わ
ってくることもありうる1例えば、第3図(12)のイ
ンデンテーション規則(および構文規則)を考えてみる
。いまく条件〉の部分を解析中にエラーを検出した場合
、フォローセット回復法では、thenやelse等の
トークンが同期トークン集合の中に含まれることになる
が、現われたelseが既に処理したifと同じインデ
ンテーションレベルを持つかどうかによって回復後の処
理もおのずと異なってくる。ifと同じインデンテーシ
ョンレベルを持つ場合には、そのelseは現在処理中
のif文に直接属するものとみなされ、そうでない場合
は上位構造または下位構造の、別のif文に属するもの
であるとみなされる0本発明では、各トークンのインデ
ンテーションレベルを必要に応じて記憶しているので、
上記のような場合分けも可能である。
最後に1本発明におけるインデンテーション規則ファイ
ルの記述形式は、第3図に示したような。
BNF記法に基づいた方法に限定されるものではない0
例えば、対象となるプログラミング言語のインデンテー
ション規則が把握できるような、簡単な例となるプログ
ラムをインデンテーション規則ファイルに書かせておく
という形式を用いてもよい、この場合、インデンテーシ
ョン規則生成部はそのプログラムからインデンテーショ
ンの仕方の特徴を抽出して、インデンテーション規則表
を生成する。また、別の方法として、インデンテーショ
ンのやり方を、質疑応答形式で、即ち、このような構文
に対してはどのようにインデントするかといった形式で
を答えさせ、その結果をインデンテーション規則ファイ
ルに記録しておくという方法もある。これらの方法を用
いれば、BNFのような専門的な記法を知らないユーザ
にも対応できるという効果がある。
〔発明の効果〕
以上説明したように、本発明によれば、構文エラーを検
出した時、プログラムのインデンテーションの付は方か
ら、正しいプログラムを推測・復元してエラー回復をす
るので、プログラムを単に記号の一次元的な並びとみな
してエラー回復する場合よりも、よりキメ細かい対応が
可能であり、また、ユーザに対して適切なエラーメツセ
ージを与えることができる。
【図面の簡単な説明】
第1図は本発明の構文解析方式を適用したコンパイラの
ブロック構成図、第2図は本実施例のコンパイラの処理
するプログラミング言語の構文規則、第3図は同じくイ
ンデンテーション規則、第4図はプログラムをトークン
に切り分けてトークンキューに入れる様子を示した図、
第5図は構文解析部のモジュール関連図、第6図は通常
処理部のフローチャート、第7図はりデユース操作の様
子を示した図、第8図はエラー処理部のフローチャート
、第9図は構文エラーを含んだプログラムの例、第10
図は正しいプログラムの候補、第11図はインデンテー
ション規則に反するプログラムの例と゛それに対するウ
オーニングメツセージの例である。 項 2 画 凛/圓 くブνグラムン 〈ブp・?り〉 く鵠」■jζ叡ン くt学j1〉 〈手穆つ:i′OJン 〈q奪九?丘京ン 〈文ン く支間〉 〈ゼ〉 〈式〉 くエーン くブーツク〉・ く変葦b
【叡ン く4傘七)文名タリクく大ンY4卜〈
埃1幻1〉 ; 1、 く需1)ン く−J壬>  、  <teや1苓ン く奇続1玄富〉 く手剰ht*をン 〈寺a!官、言列〉E ::=  ドocad才e〈璽昧υ等ン)くプ冶ツク2
 ;::=<鐵子」手? ニー くえ〉 I  Cd1l<プ軟【す)う lbegin<文子1】ンend 11す<5> %r+ <文、>  elje <文>
1 11IhJIe <4’/fン h<丈〉く丈ン 〈丈ン;く史料〉 〈t(〉 巴<<2 く式〉〈ン〈式ン 〈戒ン くくに〉 〈式〉〉<式〉 〈ポ〉→〈墳〉 〈項〉−〈ゴ壽〉 〈因1−ン 「 〈酢〉 〈因手ンノ〈凹条〉 に≧−一) 1 (〈式〉) 〈プちグジA>’  二;ツ くグロフクン0  ;:= く変叡宜f>a   、ニコ <、)6馳へ霊盲7?+>’  ;;=くフカツク〉ρ
。 〈榔官〉′<壜虻宜畜グン〈文2′ V計’ <′1wrL)。 ξ 〈@先七宜11〉− く力債起た置盲〉′<撮乏宜言夕11〉1を 喝 (d、1 1C紺1#〈館11+1 1 トC#″n’  <文ダリ>’ end’I  i
f’ り÷汁> thUI <文>’ eIse’ <
丈)/〈文〉0; くメ!リン′ (dノ (C1 (トン 礫 マ 衛 ダ 固 雫 ノρ 回

Claims (1)

  1. 【特許請求の範囲】 1、インデンテーションを自由に付けられる自由書式の
    言語で書かれたプログラムについて所定の構文規則に従
    って構文解析を行い、入力プログラム中に構文エラーが
    検出された時に、入力プログラム中の字句を削除するか
    、または適当な字句を挿入するか、またはその組合せを
    行うことによって上記入力プログラムを修正し、構文解
    析を続行する言語処理システムにおいて、該プログラミ
    ング言語の標準となるインデンテーションの方法を定め
    たインデンテーション規則を記憶する記憶手段と、入力
    プログラム中の各字句の出現する位置に関するインデン
    テーション情報を記憶する記憶手段と、上記規則と上記
    情報に基づいて上記修正方法を決定する手段とからなる
    ことを特徴とする構文解析システム。 2、自由書式のプログラミング言語で書かれたプログラ
    ムについて所定の構文規則に従って構文解析を行い、入
    力プログラム中に構文エラーが検出された時に、プログ
    ラムの適当な範囲を読み飛ばすことによって構文解析を
    続行する言語処理システムにおいて、該プログラミング
    言語のインデンテーション規則を記憶する記憶手段と、
    入力プログラムの各字句のインデンテーション情報を記
    憶する記憶手段とを有し、上記規則と上記情報に基づい
    て読み飛ばす範囲を決定することを特徴とする構文解析
    システム。 3、入力プログラムを構成する記号列を、最小の意味単
    位であるトークンに切り分ける字句解析手段と、上記ト
    ークンまたはトークンから構成される構文要素を表す情
    報と、上記トークンまたは構文要素がどれだけインデン
    トされているかを表す情報とを有する要素からなる構文
    解析用スタックを使用しながら、前記トークンの並びが
    所定の構文規則に従っているかを検査する構文解析手段
    と、該プログラミング言語のインデンテーション規則を
    記憶する記憶手段を有することを特徴とする構文解析シ
    ステム。 4、自由書式のプログラミング言語で書かれたプログラ
    ムについて所定の構文規則に従って構文解析を行う言語
    処理システムにおいて、該プログラムのインデンテーシ
    ョン規則を記憶する記憶手段と、入力プログラムが上記
    規則に従っているかを判定する判定手段と、判定した結
    果に基づいて、規則に従っていない場合にメッセージを
    出力するメッセージ出力手段を有することを特徴とする
    言語処理システム。 5、上記入力プログラムと別に、インデンテーション規
    則記述ファイルを有し、構文解析処理の前に、上記ファ
    イルからインデンテーション規則情報を読みだし、その
    情報に基づいて上記インデンテーション規則の記憶手段
    に必要な情報を設定することを特徴とする第1項〜第3
    項いずれか1項の構文解析システム。 6、上記入力プログラムと別に、インデンテーション規
    則記述ファイルを有し、処理の前に、上記ファイルから
    インデンテーション規則情報を読みだし、その情報に基
    づいて上記インデンテーション規則の記憶手段に必要な
    情報を設定することを特徴とする第4項の言語処理シス
    テム。
JP63232376A 1988-09-19 1988-09-19 構文解析および言語処理システム Pending JPH0281230A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP63232376A JPH0281230A (ja) 1988-09-19 1988-09-19 構文解析および言語処理システム
US07/408,750 US4989145A (en) 1988-09-19 1989-09-18 Syntax analysis and language processing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP63232376A JPH0281230A (ja) 1988-09-19 1988-09-19 構文解析および言語処理システム

Publications (1)

Publication Number Publication Date
JPH0281230A true JPH0281230A (ja) 1990-03-22

Family

ID=16938259

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63232376A Pending JPH0281230A (ja) 1988-09-19 1988-09-19 構文解析および言語処理システム

Country Status (2)

Country Link
US (1) US4989145A (ja)
JP (1) JPH0281230A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242960A (ja) * 1993-02-12 1994-09-02 Nec Corp 構文解析によるエラーリカバリ機能を持つ構文解析装置
JP2010140408A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード変換装置

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0285927A (ja) * 1988-09-22 1990-03-27 Hitachi Vlsi Eng Corp 記憶装置
US5412799A (en) * 1990-02-27 1995-05-02 Massachusetts Institute Of Technology Efficient data processor instrumentation for systematic program debugging and development
US5487147A (en) * 1991-09-05 1996-01-23 International Business Machines Corporation Generation of error messages and error recovery for an LL(1) parser
US5452206A (en) * 1991-09-19 1995-09-19 Pacific Bell Method for generating documentation for computer software
IL99927A0 (en) * 1991-11-01 1992-08-18 Ibm Israel Restriction checker generator
US5421730A (en) * 1991-11-27 1995-06-06 National Education Training Group, Inc. Interactive learning system providing user feedback
US5613115A (en) * 1991-12-09 1997-03-18 Total Control Products, Inc. Method for using PLC programming information to generate secondary functions such as diagnostics and operator interface
US5317509A (en) * 1992-01-21 1994-05-31 Hewlett-Packard Company Regular expression factoring for scanning multibyte character sets with a single byte automata machine
JPH0778742B2 (ja) * 1992-08-12 1995-08-23 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピユータ・プログラム言語変換装置及びその方法
JPH0728815A (ja) * 1993-02-18 1995-01-31 Matsushita Electric Ind Co Ltd 構文解析装置
JP3476881B2 (ja) * 1993-11-25 2003-12-10 富士通株式会社 仕様書の生成装置
EP0702294A3 (en) * 1994-09-13 1997-05-02 Sun Microsystems Inc Method and device for diagnosing lexical errors
US5617533A (en) * 1994-10-13 1997-04-01 Sun Microsystems, Inc. System and method for determining whether a software package conforms to packaging rules and requirements
US5678052A (en) * 1995-01-19 1997-10-14 International Business Machines Corporation Methods and system for converting a text-based grammar to a compressed syntax diagram
US5857212A (en) * 1995-07-06 1999-01-05 Sun Microsystems, Inc. System and method for horizontal alignment of tokens in a structural representation program editor
US5748975A (en) * 1995-07-06 1998-05-05 Sun Microsystems, Inc. System and method for textual editing of structurally-represented computer programs with on-the-fly typographical display
US5813019A (en) * 1995-07-06 1998-09-22 Sun Microsystems, Inc. Token-based computer program editor with program comment management
US5752058A (en) * 1995-07-06 1998-05-12 Sun Microsystems, Inc. System and method for inter-token whitespace representation and textual editing behavior in a program editor
JPH0934725A (ja) * 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法
RU2115158C1 (ru) * 1995-10-24 1998-07-10 Владимир Олегович Сафонов Способ и устройство для достоверной оценки семантических признаков в синтаксическом анализе при проходе вперед слева направо
JP2904099B2 (ja) * 1996-02-19 1999-06-14 日本電気株式会社 コンパイル装置およびコンパイル方法
EP1016000A4 (en) * 1996-12-31 2002-09-04 Intel Corp METHOD AND APPARATUS FOR ANALYZING THE KEYPAD INPUTS OF A USER TO DETERMINE OR VERIFY FACTS
US6163879A (en) * 1998-08-20 2000-12-19 Iomega Corporation Interface and method for facilitating writing and modifying of lines of programming code
US7117479B2 (en) * 2001-10-01 2006-10-03 Sun Microsystems, Inc. Language-sensitive whitespace adjustment in a software engineering tool
US20030084041A1 (en) * 2001-10-18 2003-05-01 International Business Machines Corporation Programmer's dynamic spellchecker
US7386834B2 (en) * 2002-06-28 2008-06-10 Sun Microsystems, Inc. Undo/redo technique for token-oriented representation of program code
US20040003373A1 (en) * 2002-06-28 2004-01-01 Van De Vanter Michael L. Token-oriented representation of program code with support for textual editing thereof
US20040003374A1 (en) * 2002-06-28 2004-01-01 Van De Vanter Michael L. Efficient computation of character offsets for token-oriented representation of program code
US20040006763A1 (en) * 2002-06-28 2004-01-08 Van De Vanter Michael L. Undo/redo technique with insertion point state handling for token-oriented representation of program code
US20040225998A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Undo/Redo technique with computed of line information in a token-oriented representation of program code
US20040225997A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Efficient computation of line information in a token-oriented representation of program code
US7296264B2 (en) * 2003-07-18 2007-11-13 Bea Systems, Inc. System and method for performing code completion in an integrated development environment
US7210138B2 (en) * 2003-07-18 2007-04-24 Bea Systems, Inc. System and method for performing error recovery in an integrated development environment
US7437719B2 (en) * 2003-09-30 2008-10-14 Intel Corporation Combinational approach for developing building blocks of DSP compiler
US20060184295A1 (en) * 2005-02-17 2006-08-17 Steve Hawkins On-board datalogger apparatus and service methods for use with vehicles
US9158538B2 (en) * 2007-05-21 2015-10-13 International Business Machines Corporation User-extensible rule-based source code modification
US7530060B1 (en) * 2008-01-08 2009-05-05 International Business Machines Corporation Methods and computer program product for optimizing binaries with coding style formalization
US8539443B2 (en) * 2008-05-13 2013-09-17 National Instruments Corporation Edit time analyzer in a loosely typed textual language
US8504984B1 (en) * 2009-05-29 2013-08-06 Google Inc. Modifying grammars to correct programming language statements
US8479156B2 (en) * 2009-06-18 2013-07-02 National Instruments Corporation Providing target specific information for textual code at edit time
CN103645931B (zh) * 2013-12-25 2016-06-22 盛杰 代码转换的方法及装置
KR101623174B1 (ko) * 2014-08-27 2016-05-20 주식회사 파수닷컴 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57189239A (en) * 1981-05-15 1982-11-20 Yokogawa Hokushin Electric Corp Listing system for program list
US4819233A (en) * 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242960A (ja) * 1993-02-12 1994-09-02 Nec Corp 構文解析によるエラーリカバリ機能を持つ構文解析装置
JP2010140408A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード変換装置

Also Published As

Publication number Publication date
US4989145A (en) 1991-01-29

Similar Documents

Publication Publication Date Title
JPH0281230A (ja) 構文解析および言語処理システム
Karttunen et al. Two-level rule compiler
CA2204447C (en) Document display system and electronic dictionary
US5960384A (en) Method and device for parsing natural language sentences and other sequential symbolic expressions
US5285526A (en) Method of manipulating elements of a structured document, function key operation being dependent upon current and preceding image element types
JP2007172657A (ja) 一般に混同するワードを自然言語パーザにおいて識別及び分析する方法及びシステム
Sedláček et al. A new Czech morphological analyser ajka
EP1033663A2 (en) Apparatus and method for generating processor usable data from natural input data
EP1247174A2 (en) Any-to-any component computing system
US5369576A (en) Method of inflecting words and a data processing unit for performing such method
Sippu et al. A syntax-error-handling technique and its experimental analysis
Carpenter et al. ALE: the attribute logic engine user's guide, version 2.0. 1
EP0878766A2 (en) Method for converting formatted documents to ordered word lists
JP3235728B2 (ja) 会話制御方式
US7107582B2 (en) System and method for source-driven form-independent dynamic content resolution
WO1996017310A1 (en) System and process for creating structured documents
Baird Ruby by example: concepts and code
Sedlácek et al. Automatic Processing of Czech Inflectional and Derivative Morphology
US20130318072A1 (en) Searching apparatus, and searching method
TW452711B (en) Method using word affix for word search
Hazel Development of the ZED text editor
Jackson Critical reading for software developers
van Halteren Towards a syntactic database: The TOSCA analysis system Hans van Halteren and Nelleke Oostdijk University of Nijmegen
KR20210067332A (ko) 스토리텔링 저작을 위한 콘텐츠 추천 및 제공 방법.
Bonfante et al. CHAPTER TWELVE SUPERTAGGING WITH CONSTRAINTS