JPH05216681A - プログラムソースコード解析手法 - Google Patents

プログラムソースコード解析手法

Info

Publication number
JPH05216681A
JPH05216681A JP4284078A JP28407892A JPH05216681A JP H05216681 A JPH05216681 A JP H05216681A JP 4284078 A JP4284078 A JP 4284078A JP 28407892 A JP28407892 A JP 28407892A JP H05216681 A JPH05216681 A JP H05216681A
Authority
JP
Japan
Prior art keywords
language
grammar tree
node
independent
environment
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
JP4284078A
Other languages
English (en)
Inventor
Premkumar Devanbu
デヴァンブ プレムクマー
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.)
AT&T Corp
Original Assignee
American Telephone and Telegraph Co Inc
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 American Telephone and Telegraph Co Inc filed Critical American Telephone and Telegraph Co Inc
Publication of JPH05216681A publication Critical patent/JPH05216681A/ja
Pending legal-status Critical Current

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99934Query formulation, input preparation, or translation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【目的】 プログラムソースコード分析の手法を提供す
る。 【構成】 特定のプログラミング環境のプログラム言語
に関して生成された文法ツリーを独立した文法ツリーに
変換する変換手段と該独立文法ツリーを解析して情報を
ディスカバリする解析手法とからなる。変換手段は言語
とプログラミング環境とに関する明細から変換発生器に
より生成され、そして解析手法はディスカバリされるべ
き情報の明細から解析器により生成される。ディスカバ
リされるべき情報の明細は多項式時間で完成され得る解
析法のみを指定する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的には、ソフトウ
エア開発、より詳細には、現存のソースコードを分析す
る問題に関する。
【0002】
【従来の技術】大きなシステムにおけるソフトウエア開
発のコストの増大は良く知られている。このコストの大
部分はプログラマが保守に費やす時間に起因する。プロ
グラマは常に大きな慣れないコードの理解する問題に直
面する。この理解する仕事はディスカバリ(discovery
)と呼ばれている。この発見の際にプログラマを支援
するための幾つかのツールが現在利用できる。これらツ
ールはソースを通じて自動的にランし、報告書を生成す
る。このようなシステムの例としては、CSCOPE及
びCIAがある。SCOPEに関しては、J.L.ステ
フェン(Steffen )によって1985年1月に開催の
SENIX学会冬季会議議事録(Proceedings of the U
SENIX Associatio,Winter Conference )に掲載の論文
『CSCOPEによるCプログラムの対話的調査(Inte
ractive examination of a c program with Cscope)』
において詳細に説明されており、CIAについてはチェ
ン(Chen)、Y.F.及びラマムーシ(Ramamoorthy
)、C.V.によって1986年10月にシカゴにて
開催された第10回国際コンピュータソフトウエア及び
アプリケーション会議の議事録(Proceedingsof the Te
nth International Computer Software and Applicatio
ns Conference(COMPSAC)に掲載の論文『C情
報アブストラクタ(The C InformationAbstractor)』
において詳細に説明されている。
【0003】
【発明が解決しようとする課題】現在利用できる発見ツ
ールは有益でわあるが、これらは制約を持つ。例えば、
これらを以下に与えられるような質問に答えるために使
用することはできない。 1.CollectDigitを呼び出す任意のルーチンがグローバ
ル変数CallStatusを直接に(つまり、ポインタに従うこ
となく)修正するかという種類の質問。(これら質問の
幾つか、特に、ポインタが伴うような質問は、純粋に静
的分析によって答えることはできない。但し、しばし
ば、これは問題とはならない。つまり、変数、構造等へ
ポインタを通じることなく直接アクセスすること自体が
有効である場合がある。) 2.直接に修正されているStationRec構造のLampStatus
フィールドの値はどこにあるかという質問。 3.エミレーションタイプのTrunkType の変数を起動す
る全てのルーチンがISBNtariffB ケースを扱うかという
質問。 4.誰かがCallRec データ構造へのポインタをUserRec
データ構造に直接に入れているかという質問。 5.SendMsg ルーチンを呼び出す任意のルーチンが、”
MsgBufというタイプの構造へのポインタ”というタイプ
の引き数を直接パスするかいう質問。 6.どのルーチンがSendMsg というルーチンのみを呼び
出すかという質問。 7.MsgBufというタイプの構造へのポインタがかつてGe
nData というタイプの構造へのポインタへタイプカース
ト(typecast)されたことがあるかと言う質問。 8.サブルーチンが包含文脈(contained context )内
にパラメータ或はグローバル変数と同一名を持つ変数を
再宣言することはないかというチェック。
【0004】さらに、これらは単一のソース言語にて書
かれたプログラムに制約される。CSCOPE及びCIA のケー
スにおいては、この一つのソース言語はCである。当分
野において要求されていること、及びここに開示される
装置及び方法の一つの目的は、多くの異なるプログラミ
ング言語にて書かれた複数のプログラムに対して上に挙
げたような質問に答えることができる発見ツールを提供
することにある。
【0005】
【課題を解決するための手段】上の目的はソースコード
を表わす文法ツリーを分析することによりそのプログラ
ムのソースコードに関する情報を発見するための発見ツ
ールを提供することによって達成される。この発見ツー
ルは、以下の特徴を持つ。つまり、 ・ソースコードを表わす第一の文法ツリーを該ソースコ
ードを表わす第二の文法ツリーに翻訳するための手段が
提供される。ここで、第一の文法ツリーはソースコード
の言語或は実行可能なコードがソースコードから生成さ
れる環境或は或はこの両方に依存し、第二の文法ツリー
は言語及び環境の両方に依存しない。 ・第二の文法ツリーを分析することによりソースコード
に関する情報を発見するための手段が提供される。
【0006】上記の目的はまた任意の環境内で任意の言
語にて書かれたコンピュータプログラムの特定のアスペ
クトを分析するための以下のステップを含むの方法を採
用することによって達成される。つまり、 ・プログラムに対する与えられた言語或は与えられた環
境或はこの両方に依存する依存文法ツリーを受信するス
テップ、 ・この依存文法ツリーを環境にも言語にも依存しない独
立文法ツリーに翻訳するステップ;及び ・必要に応じて独立文法ツリーを分析することによって
この特定のアクペクトに関する情報を得るステップから
成る方法によって達成される。
【0007】本発明の目的は、従って、改良されたプロ
グラミングツール及び技法を提供することにあり;本発
明のもう一つの目的はインプリメンテーションに依存し
ないプログラミングツール及び技法を提供することにあ
り;本発明のさらにもう一つの目的はユーザが遂行され
るべき分析の種類を指定できるプログラミングツール及
び技法を提供することにある。本発明のこれら及びその
他の目的及び長所は当業者においては以下の図面及び詳
細な説明から明らかとなるものである。
【0008】
【実施例】導入 コンピュータプログラミングはますますプログラミング
環境内で行なわれるようになってきている。このような
プログラミング環境下においては、プログラマはプログ
ラムのためのソースコードを高水準言語、例えば、C或
はADAにて書き、次に、コンパイラと呼ばれるコンピ
ュータプログラムを使用してコンピュータによって実行
可能なオブジェクトコードを生成する。最近のコンパイ
ラは二つの主要な要素、つまり、ソースコードを分析
し、オブジェクトコードを表わす注釈付き文法ツリーを
生成するフロントエンド、及び注釈付き文法ツリーを使
用してオブジェクトコードを生成するバックエンドを含
む。フロントエンドによっていったん生成されると、こ
の注釈付き文法ツリーはこの環境に属する他のプログラ
ミングツール、例えば、デバッガ或は発見ツールによっ
ても使用できる。
【0009】上の説明から分かるように、プログラミン
グ環境は特定の言語及びコンパイラに依存する傾向を持
つ。このため、あるプログラミング環境に対して構築さ
れたデバッガ或は発見ツールはそのプログラミング環境
のコンパイラによって提供される注釈付き文法ツリーと
のみ働き、別のプログラミング環境下でこのデバッガ或
は発見ツールを使用するためにはそれがその新たな環境
の注釈付き文法ツリーと共に機能できるようにツールの
インプリメンテーションに大きな修正を加えることが要
求される。さらに、プログラミング環境が特定の言語及
びコンパイラに依存すると言う事実から、プログラマが
有益だと思うソースコードについての任意の質問ができ
るようにプログラムされた発見ツールではなく、ソース
コードに関するあるタイプの質問にのみ答えるように事
前にプログラムされた発見ツールが与えられる。ここで
も、問題は、言語及び環境に依存する注釈付き文法ツリ
ーにある。このような注釈付き文法ツリーを使用する発
見ツールを成功理にプログラムするためには、プログラ
マはこの注釈付き文法ツリーを理解しなければならな
い。このような言語及び環境に依存する注釈付き文法ツ
リーは個々の言語環境の組合わせに対して異なるのみで
なく、しばしば、高度に、特異的であるために、ツール
をプログラミングし、これ実効性を得ることは困難過ぎ
る問題であった。
【0010】言語及び環境に依存する注釈付き文法ツリ
ーにプログラミング環境が依存すると言うことは、要す
るに、プログラマに対するこのような環境の有効性が大
きく低減されることを意味する。このような環境が個々
の言語コンパイラの組合わせに対して新たに生成されな
ければならないという事実、及び個々の新たな言語コン
パイラの組合わせがプログラマに対して新たな環境を意
味すると言う事実は、プログラマがその新たな環境内で
成功理に仕事ができるまでに要求される時間及び努力を
増加させる。
【0011】独立文法ツリー 導入の所で概説されたように、完全プログラマブル発見
ツールはソースコードを表わす完全属性化文法ツリーを
要求する。このようなツリーを与えられた場合、分析者
は分析ツリー上を行き要求される情報を抽出することが
できる。ここに開示される発見ツールはソースコードを
表わすために独立文法ツリーを採用することにより言語
及びコンパイラに依存する文法ツリーと関連する諸問題
を回避する。独立文法ツリーは、ここに開示される発見
ツールが実現された全ての言語コンパイラのペアに対し
てこれが同一でることからここではこのように呼ばれ
る。任意のフロントエンドによって生成された依存文法
ツリーから独立文法ツリーが誘導される方法について以
下により詳細に示される。図1はここに開示される発見
ツリーによって使用される独立文法ツリーの一つを示
す。独立文法ツリー101は113の所に示されるソー
スファイルTest.Fun.c内のコードを表わす。
このコードは、文字/*及び*/にて囲まれたコメン
ト、グローバル整数変数MyGlobalIntを宣言
する宣言115、関数exampleFunを定義する
関数定義117、及び関数定義117の一部としての値
1をMyGlobalIntに割り当てる割り当てステ
ートメント119から成る。独立文法ツリー101は複
数のノードから構成される。図1において、ノードは小
球として現われる。小球のみによって示される単純ノー
ド105、及び大括弧({})内に囲まれた小球によっ
て示されるリストノード109の二つのタイプのノード
が存在する。リストノード109はセットの単純なノー
ド105を示す。単純ノードは図1において矢印107
によって示される一つ或は複数の子供を持つ。子供ノー
ドは単純ノード或はリストノードであり得る。点線の矢
印111は矢印の終端の所のノードがリストノード10
9内の単純ノード105の一つであることを示す。
【0012】独立文法ツリー101内の各ノードは一つ
のタイプを持つ。単純ノード105のタイプはソースコ
ード内のそのノードによって表わされる主体を指定し、
またそのノードが持つ子供の数及び種類を指定する。以
下においては、単純ノード105はスロットを持つもの
として参照される。各スロットは適当なタイプの子ノー
ドにて満たされる。リストノード109のタイプはリス
トノード109によって表わされる単純ノード105の
タイプを指定する。リストノード109によって表わさ
れる単純ノード105の全ては同一タイプを持たなけれ
ばならない。
【0013】独立文法ツリー101内の最も左りのノー
ド105から開始するが、このノードはルートノードで
ある。これは、プログラム113を含むファイルTes
t.fun.cを表わす。ルートタイプのノードはグロ
ーバル変数(プログラム内のどこからでもアクセスでき
る変数)を表わす単純ノード105を含むリストノード
109に対するスロット、及びプログラムを構築する関
数を表わす単純ノードを含むリストノード109に対す
るスロットを含む。この例としてのプログラムは単純グ
ローバル変数を含み、このためlist of variables とラ
ベルされるリストノード109は変数MyGlobal
Intを表わす単一のの単純ノード105を含む。この
単純ノード105は、変数の名前を表わす単純ノード1
05に対するスロット、及び変数のタイプを表わす単純
ノード105に対するスロットの二つのスロットを持
つ。
【0014】同様に、単純関数が存在し、list of Func
tions とラベルされるリストノード109は関数exa
mpleFunを表わす単一の単純ノード105を含
む。exampleFunの単純ノード105は、関数
の名前を表わす単純ノード105に対するスロット、関
数内のステートメントを表わすリストのノードであるリ
ストノード109を表わすためのスロット、及び関数に
よってリターンされる値のタイプを示す単純ノードに対
するスロットの計三つのスロットを含む。exampl
eFunが単一のステートメント119を含むために、
リストノード109は割り当てステートメントを表わす
単一の単純ノード105を含む。このノードは、一方、
プログラム内のステートメントの数を表わすスロット、
それに割り当てステートメントが値を割り当てる変数
(このケースにおいては、グローバル変数MyGlob
alInt)を表わすスロット、及び割り当てられる
値、このケースにおいては1を表わすスロットの計三つ
のスロットを含む。
【0015】図1から分かるように、例としてのプログ
ラム113に関する質問は、独立文法ツリー101を使
用して答えることができる。例えば、プログラム113
内の値がMyGlobalIntに割り当てられている
位置に関する質問は、プログラム内の関数を表わすリス
トの関数ノードを含むリストノード109内の各ノード
を調べ、関数ノードの子供の一つであるステートメント
のリストがその中に値がMyGlobalIntに割り
当てられたステートメントに対する単純ノード105を
含むか否かを決定することによって答えることができ
る。含む場合は、この単純ノード105の子供はプログ
ラム内のステートメントのライン番号及び割り当てられ
た値のソースを含む。
【0016】原理上は、文法を構築するために使用され
る全てのツールが独立文法ツリー101を構成するため
に使用することができる。このようなツールの例として
は、UNIXツールのLex及びYaccがある。この
ようなツールのその他の例としては、バランス(Ballan
ce)、R.グラハム(Graham)、S.,及びバンデバン
タ(Van De Vanter )、Mらによって、1990年にカ
リフォルニア州イルビン(Irvine)によって開催された
ソフトウエア開発環境に関する第4回SIGSOFTシ
ンポジウム(4th SIGSOFT Symposium on Software Deve
lopment Environments)の議事録に掲載の論文『統合さ
れた開発環境のためのPan言語に基づく編集システム
(The Pan Language-Based Editing System For Integr
ated Development Environments )』に説明のPanシ
ステム;ボラス(Borras)、P.、クレメント(Clemen
t )、D.、デスピロウクス(Despeyroux)、Th.、イ
ンセルピ(Incerpi )J.、カーン(Kahn)、G.,ラ
ング(Lang)、B.によって、1988年にMass、
ボストンにて開催された実際的なソフトウエア開発環境
に関するSIGSOFT/SIGPLANソフトウエア
エンジニアリングシンポジウム(SIGSOFT/SIGPLAN Soft
ware Engineering Symposium on PracticalSoftware De
velopment Environments )の議事録に掲載の論文『C
ENTAUR:システム(CENTAUR:The System)』にお
いて説明のCENTAUR;ハベルマン(Habermann
)、N.、及びノトキン(Notkin)、D.によって
フトウエアエンジニアリングに関するIEEE議事録
(IEEE Transactions on Software Engineering )、S
E−12、1986年12月号に掲載の論文『Gand
alf:ソフトウエア開発環境(Gandalf:Software Dev
elopment Environments )』において説明のGanda
lf;CA、パロアルト(Palo Alto )に所在のリーゾ
ニングシステム社(The Reasoning Systems Corporatio
n )のRefineユーザマニアル(Refine Users Man
ual )において説明のREFINE、及びレプス(Rep
s)、T.、及びティーテルバーム(Teitelbaum)、
T.によって1984年、PA、ピッツバーグにて開催
実際的なソフトウエア開発環境に関するSIGSOF
T/SIGPLANシンポジウム(SIGSOFT/SIGPLAN So
ftware Engineering Symposium on Practical Software
Development Environments )の議事録に掲載の論文
『シンセサイザジェネレータ(The Synthesizer Genera
tor )』において説明のコーネルシンセイサイザジェネ
レータ(Cornell Synthesizer Generator )がある。
【0017】独立文法ツリーを構築するためにこれらツ
ールを使用することの問題は、ある与えられた言語に対
する独立文法ツリー101を得るために、完全に機能す
るフロントエンドを完全に実現することが要求されるこ
とである。これは、比較的単純な言語、例えば、ANS
ICの場合であっても、非常に困難である。より複雑
で、不規則な言語、例えば、C++或はADAのような
場合は、このタスクは厖大なものとなる。後により詳細
に説明されるように、ここに開示される装置の好ましい
実施例は、トランスレータを使用して、任意のフロント
エンドによって生成された言語及び環境に依存する文法
ツリーから独立文法ツリー101を生成する。こうし
て、この好ましい実施例は、独立文法ツリー101を得
るためにフロントエンド全体を再インプリメントする必
要性を排除する。
【0018】発見ツールのアーキテクチュア 図3はここに開示される発見ツールのアーキテクチュア
の全体図である。図3は発見ツール323の概念ブロッ
ク図である。このブロック図において、影を与えられた
ボックスはデータ項目を示し、影のないボックスは”処
理(porcessing)要素を表わす。トップから開始し、ソ
ースコードファイル313が現存の環境のフロントエン
ド309に供給される。結果として、言語及び環境に依
存する文法ツリー311が得られる。言語及び環境に依
存する文法ツリー311はここで独立文法ツリー101
に翻訳されなければならない。これは、トランスレータ
305によって行なわれるが、これはフロントエンド3
09によって提供される文法ツリーを受け取り、独立文
法ツリー101を生成する。ある好ましい実施例におい
ては、トランスレータ305は発見ツールのGENII
301と呼ばれるコンポーネントによって生成される。
GENII301はプログラムが書かれている高水準プ
ログラミング言語及びフロントエンド309及びそれが
生成する文法ツリー311の明細書303を受け取り、
この情報を使用してトランスレータ305を生成する。
明細書を生成するための幾らかの努力が要求されるが、
この努力はフロントエンド309の全体を生成するため
に要求される努力よりも非常に小さなものであり、また
ある与えられたプログラミング言語環境の組合わせに対
してたった一度要求されるのみである。いったん明細書
303が作成されると、GENII301はトランスレ
ータ305を生成し、そしてトランスレータ305を使
用して文法ツリー311から独立文法ツリー101を生
成することができる。トランスレータ305を生成する
のに加えて、GENII(301)は要約シンタックス
辞書を生成する。要約シンタックス辞書307はソース
ファイルの言語に関する情報を含む。この情報はトラン
スレータ305によって独立文法ツリー101を生成す
るために使用される。
【0019】特定の質問に対する答えを見つけるための
ソースコードアナライザは以下のように生成される。つ
まり、ソースコードがいかにして分析されるべきかを指
定するアナライザ明細書318が後に説明される言語に
て書かれる。この明細書318は発見ツールのGENO
Aと呼ばれるコンポーネントに供給されるが、GENO
Aはアナライザプログラム319を生成する。アナライ
ザプログラム319の生成において、GENOAは要約
シンタックス辞書307を使用することによって、明細
書318内に指定される種類の分析がソースファイル3
13の言語に対して意味を持つか否かを決定する。アナ
ライザプログラム913は次に独立文法ツリー101上
でランし、出力321を生成するが、これは、明細書3
18内に指定される質問に対する答えを含む。
【0020】言語及びインターフェース明細書 以下のセションにおいては、ある与えらたれた現存のフ
ロントエンド309へのインターフェースがいかにして
規定され、これからトランスレータ305がいかにして
生成されるかについて説明される。発見ツール323は
目標言語に対する特定のフロントエンドにGENII明
細書言語にて明細書303を書くことによってインター
フェースされ、GENIIアプリケーションジェネレー
タ301を通じてランするが、これは、属性化文法ツリ
ー要約データタイプ層(attributed parse tree abstra
ct data type layer)を実現するセットの翻訳ルーチン
(305)、及び要約シンタックス辞書307を生成す
る。GENII明細書言語は目標言語の要約シンタック
ス構造、並びに依存文法ツリー311を実現するために
特定のフロントエンドによって使用されるデータ構造を
記述するために使用される。GENII明細書言語を説
明するために、我々は、GENOAとCinインタプリ
ッタとの間のインターフェースを実現する、つまり、C
inCイタンプリッタによって生成された依存文法ツリ
ー311がどのように独立文法ツリーに翻訳されるかを
記述する明細書の部分を示す。CinはCプログラムを
生成、実行、テスト、デバッグ、及び分析する設備を持
つ反射Cプログラミング環境である。Cinは他のツー
ル内に組み込まれることを許すオープンアーキテクチュ
アを持つ。Cinについては、T.コワルスキー(kowa
lski)らによって1991年1月16にテキサス州ダラ
スにて開催されたUNIXをベースとするソフトウエア
開発環境に関する国際ワークショップの議事録(Procee
dings of the International Workshop on UNIX-Based
Software Development Environments 、USENIX)
に掲載の論文『反射Cプログラミング環境(A Reflecti
ve C Programming Environment)』において詳細に説明
されている。
【0021】Cinに対する完全なインターフェース明
細書303は非常に長く、このセクションにおいては、
我々は、C内の異なるタイプのステートメントと関係の
ある部分、及び複合ステートメントの詳細について示
す。この明細書は言語が独立文法トリー101にて表わ
されたときのこの言語の要約シンタックスを構成するノ
ードタイプの一連の宣言から成る。本質的には、ノード
タイプ宣言には大きく分けて、単一ノード宣言、ノード
バリアント宣言、及びバリアントノードタイプ宣言の3
つのが存在する。図4には単一ノードタイプの宣言40
1が示されるが、ここで、我々は、単一ノードの子供、
及びこれら子供が(フロントエンド309内のコードを
発動することによって)親の単一ノードからいかにして
生成できるかを定義する。図4はCステートメントを表
わすタイプstmtのノードを宣言するが、これは、二
つの属性、つまり、(ライン1)LineNo、及び
(ライン2)FileNameを持つ。ここで、Lin
eNoはCプログラムを含むファイル内のステートメン
トのライン数を表わすタイプIntegerのフィラー
を含み、FileNameは、Stringであり、ス
テートメントを含むファイルを表わす。引用符内のCの
フラグメントはフロントエンド309によって生成され
た文法ツリー311からステートメントのライン数を得
るために発動されることを必要とするフロントエンド3
09内のコードを示す。タイプstmtのノードに対し
て定義されるこれら属性は、C内のステートメントの様
々な異なる種類に対応するタイプを持つノードによって
受け継がれる。図5はCステートメントのこれら種類が
言語及びインターフェース明細書303内にいかに宣言
されるかを示す。宣言501はノードバリアントタイプ
の宣言である。
【0022】ライン0はそれに対して変数が宣言される
ノードのタイプ(ここでは、stmt)を識別する。E
xit(ライン1)からExprStmt(ライン1
1)(これは、割り当てステートメントなどのような表
現ステートメントである)までの12個の異なる種類の
ステートメントがCにて表示される。我々はこれらの各
々をタイプstmtのバリアントノードと呼ぶ。これら
バリアントノードタイプを持つ全てのノードはstmt
からの全ての属性を受け継ぐ。フロントエンド309が
Cステートメントのこれら異なる種類に対応する依存文
法ツリー311内のノードを生成するとき、我々は、そ
のノードによって表わされるステートメントのタイプを
識別し、またこのノードを独立文法ツリ−101内の正
しいバリアントタイプのノードに翻訳することができる
ことが要求されることは明らかである。
【0023】図6は宣言601内に宣言されたステート
メントタイプの一つに、つまり、複合ステートメントタ
イプに対するバリアントノード宣言601を示す。引用
符(例えば、ライン0の端)の所の引用符内のコードフ
ラグメントはノードが複合ステートメントであるかをテ
ストするために発動されることができるフロントエンド
309内のコードである。これが複合ステートメントで
あるときは、このノードは二つの子供、つまり、Loc
alVars(ライン2−5)(個々がタイプVari
ableであるノードのリスト)、及びStmtLis
t(ライン6−9、ステートメントのリスト)の二つを
持つ。ライン3上のコードフラグメント(7)は、フロ
ントエンド309内のLocalVarsのリスト(S
tmtlist)内の第一のVariable(Stm
t)を得る関数を識別し;ライン4上のフラグメント
(8)は我々にこのリスト内の次のvariable
(Stmt)をいかにして得るかを教える。Cinフロ
ントエンドからCへの完全なインターフェース明細書は
約90個のノードタイプ(バリアント及び単順の両方)
の宣言を持つが、これは、GENII303に対しては
約800ラインのコードとなる。このケースにおいて
は、明細書は17,000行を超えるて拡張するが、こ
れによって、Cin内の属性化シンタックスツリーに対
する要約シンタックス辞書307が構築され、トランス
レータ305がCinにて生成された依存文法ツリー3
11を独立文法ツリー101に翻訳するために使用する
ルーチンが実現される。GENIIは独立文法ツリー1
01内のノードのアンパージング(unparsing)を規定
する設備を持つ。例えば、タイプCompoundSt
mtのノードのC言語内の実際のスンタックスがいかに
して独立文法ツリー101内のノードの構成要素から派
生できるかを規定することができる。
【0024】アナライザ321の定義 アナライザ319はソースファイル313内のプログラ
ムの分析をフロントエンド309から作られた文法ツリ
ーから要求された情報を得るために独立文法ツリー10
1のノード内に指定される関数を用いて遂行する。GE
NOA317はアナライザ319をアナライザ319に
対して要求される関数を得るために独立文法ツリー上で
動作することによって生成する。独立文法ツリー101
内のノード上でGENOA315によって遂行される主
な動作は、a)ある与えられたノードに対して与えられ
たスロットのフィラーをExtract(抽出)するこ
と(ステートメントノードのライン番号を発見するこ
と)、b)ある与えられたノードをExpand(拡
張)すること、つまり、全ての子供を見つけること、及
びTypeOf、つまり、ある与えられたノードのタイ
プを発見すること(例えば、これは、Statemen
t an IF、or Switch、a Got
o...?によって表わされる)である。アナライザコ
ード319が実行されるとき、これはフロントエンド3
09内のアナライザコード319によって指定されるコ
ードを発動する。結果がこの発動によってリターンされ
ると、アナライザコード319は独立文法ツリー101
内の新たなノードを生成し、結果を格納する。この新し
いコードは、一方、アナライザコード319の実行が進
行するに従って拡張される。図2は一例としてのアナラ
イザ明細書201を示す。例としてのアナライザ明細書
201はGENOA317にアナライザ319を生成さ
せるが、アナライザ319はフロントエンド309によ
ってコンパイルされた任意のCプログラム上で実行でき
以下を行なう。つまり:
【0025】各ソースファイルに対して、リポートファ
イル内に/tmp/globlist、全ての関数及び
ライン番号をプリントするが、ここで、割り当てステー
トメントのLHS上にグローバル変数が発生する。ステ
ートメント内のどこにグローバル変数が現われるかを検
出するC言語プログラミング環境内での現存のツールが
あるが、これらツールは、一般には、変数が変わった場
合、つまり、グローバル変数が文脈的に割り当てステー
トメントの直左側にきた場合は検出することができな
い。
【0026】アナライザ318を書くために使用される
言語(ここでは、以降、”アナライザ言語(analyzer l
anguage )”と呼ばれる)は言語独立文法ツリー101
上での動作を指定し、従って、特にこのような動作を記
述するために設計される。アナライザ言語はその動作を
ノードのタイプとの関連、及び任意のタイプのノードの
スロットの内容に対する動作との関連で規定する。ま
た、ノード上に呼びだすことができる手順を定義するこ
ともできる。また反復も許される。
【0027】図2に示されるように、アナライザ明細書
201のライン0はアナライザ明細書201の実行の結
果を受け取る出力ファイル321(ライン0)を指定す
る。ライン1はこの手順をGlobalFindと名付
ける。アナライザ言語内の手順は、必ず、一つの内包的
アーギュメント、”現ノード”を持つ。このケースにお
いては、”現ノード”は独立文法ツリー101のルート
ノードである。このノードは、ライン2に指定されるよ
うなタイプとして”ファイル”を持つ。”現ノード”に
よって表わされるファイルは、勿論、現在分析されてい
るプログラムのソースコードを含むファイル313であ
る。我々は、次に、少しのローカル変数(3−5)を定
義する。
【0028】ライン6から25はこの手順の本体を形成
する。ライン6の所の左大括弧及びライン25の所のこ
れに対応する右大括弧はその名前がライン7の所の左括
弧に続いて現われる一つ或は複数のノード上で遂行され
るべきリスト反復動作を指定し;ライン24の終端の所
の右括弧は、独立文法ツリー101のルートノードであ
る”ファイル”という名称のノード上で遂行されるべき
これら動作の終端を示す。
【0029】かぎ括弧はその上で反復動作が遂行される
べきスロットを示すために使用される。従って、リスト
反復動作がその上で遂行される最初のスロットはグロー
バル変数を表わすノードのリストを含むスロットであ
る。反復動作の記述においては、現在それに関して動作
されているノードはアナライザ言語にて定義された名前
である$ThisNodeによって示される。ライン9
から分かるように、リスト上の各ノードは変数Glob
leList内に格納され、従って、これは、リスト反
復動作の終端においてプログラム内の全てのグローバル
変数のリストを含む。
【0030】次のリスト動作は関数を表わすノードのリ
ストを含むスロット上で遂行される。このリスト内のノ
ード上での動作はライン11−24の所に定義される。
関数ノードのリスト内の各ノードに対して、アナライザ
は以下を遂行する。つまり、これは、まず初めに、関数
名をローカル変数TheFuncName内に置く。こ
れは次に、各関数ノードの子であるステートメントノー
ドのリスト内の各ステートメインノード上でのもう一度
のリスト反復動作を遂行する。各ステートメントノード
内において、アナライザ明細書はステートメントノード
のライン番号のノードの子供からそのステートメントの
ライン番号を得て、このライン番号をローカル変数Th
eLineNoに割り当てる。次に、プログラムはステ
ートメントノードのサブツリーを通じて探索することに
よって問題のステートメントがその左側に変数を持つ割
り当てステートメントであるか否かを決定する(ライン
16−18)。ノードのサブツリーを通じての探索は、
ここでは、それぞれライン16及び24上に示される左
及び右かぎ括弧にて示される。問題のステートメントが
割り当てステートメントであるときは、GlobLis
t内のグローバル変数のリストが調べられ(ライン2
0)、ステートメントノードによって表わされる割り当
てステートメントの左側の変数がグローバル変数のリス
ト上にあるか否かが決定される。ある場合は、プリント
ステートメント(ライン21−24)が実行されるが、
これは、グローバル変数が修正された関数及びライン番
号を示すメッセージを出力ファイルに出力する。
【0031】GENOAのシンタックス及びQGENOA
特性化 アナライザ言語701のシンタックス701が図7に示
される。この言語は、数多くの種類のコードを通じてプ
ログラマが遂行したいと思う殆どの種類の分析をコンパ
クトに、便利に表現できるように設計されている。さら
に、実際的な殆どの種類のコード分析(例えば、前記の
先行技術の説明のときリストされたもの)を表わす能力
を持ち、しかも要求される計算特性を持つサブセットの
アナライザ言語が存在する。このような計算特性はGE
NOA317によって生成されるアナライザ319が数
多くの種類のコードを通じてランされることが要求され
る傾向を持つために必要となる。
【0032】計算上、アナライザ言語内には大きく分け
て二つの種類の構造、つまり、式(expressions )及び
横断線(traversals)が存在する。式のケースにおいて
は、図7にリストされる動作、つまり、append、
equal、cons、member等は全て低オーダ
ーのポリノミナル時間である。単一ノードのリストに対
するconsは、単一ノードのequalと同様にO
(1)である。二つのリストのappendはequa
l及びmemberと同様に線型である。横断線を考察
した場合、ノードの特定の子(例えば、割り当てノード
の1hs)を取る動作は、定時間動作であり、あるタイ
プの子を取る動作は任意のノードのサブノードの数に対
して線型である。リスト横断線及びサブツリー横断線は
それぞれリスト或はサブツリーのサイズに対して線型で
ある。このフルツリー横断線がルートから開始して全ツ
リーを通じて反復する。
【0033】どのようなクラスの質問が完全なアナライ
ザ言語にて指定することができるであろうか。反復を使
用して非終端計算を書くことができることは明らかであ
るが;但し、我々が遭遇する殆どの実際的な例は、先に
リストしたものを含めて、反復なしに、或は場合によっ
ては手順の呼び出しなしに扱うことができる。従って、
ここでは、反復及び手順呼を考察から落とすものとす
る。次に、appendにて、文法ツリーのサイズに指
数的なリストを簡単に構成できることは直に分かる。こ
の場合は、単に、’[”横断線の内側に付加式が埋込ま
れ、各時間を通じてのリストの長さが倍にされる。従っ
て、この場合はその実行時間が文法ツリーのサイズの指
数となる質問が書かれることとなる。これを排除するた
めに、我々は、append及びcons式の一つの引
き数をこれら質問の要素であると制限するが、この制約
は、多くの実際的な質問を書くことができる我々の能力
に悪影響を与えるものではない。この制約により、最悪
の場合でも、我々は、トリー内で我々が訪れる各ノード
に対して最大でもリストをn個のノードに成長できるの
みとなる。我々は以下にプログラマは文法ツリーのサイ
ズにポリノミアル(polynominal )なリストのみを成長
することができることを示す。
【0034】これら制約のために、我々は残りのアナラ
イザ言語をQgenoa と呼ぶ。この言語は、以下の重要な
実際上の特性を持つ。 ・この言語にて表現された文法ツリーを通じての任意の
質問(或は分析の明細書)はポリノミアル時間にて計算
することができる。 ・反対に、Qgenoa 言語は、全てのポリノミナル時間
(polynomial time )の計算を文法ツリー上に表現する
ことができる。
【0035】結論 上記において、我々は、様々なプログラミング言語にて
実現されるプログラムのための任意のコードアナライザ
を構築するためのGENOA/GENIIシステム32
3を開示した。GENII301はGENOA317が
異なる言語のフロントエンドにインターフェースするこ
とを可能にし、従って、カスタム化されたアナライザを
実現するためのタスクを簡素化する。我々はまた当業者
がいかにしてシステム323を作成及び使用したら良い
か説明した。加えて、我々は、このアナライザ言語が表
現性に富みかつ評価が簡単な幾つかの有効な反復構造を
持つことを示した。実際、文法ツリー上の全ての質問を
厳密に表現できる有効なアナライザ言語のサブ言語が存
在する。
【0036】前の詳細な説明はC言語のプログラムの分
析を遂行するためにシステム323をいかに作成するか
について示した。但し、詳細な説明において明確にした
ように、本発明はC言語に対する発見ツールに制約され
ることは全くなく、任意の高水準言語にて書かれたソー
スコードの分析に使用できる。同様に、独立文法ツリー
101の特に有益な実施例が開示されたが、他の実現も
可能であり、またシステム323の他のコンポーネント
は独立文法ツリー101の個々の実現に対してそれに適
合るように変えられる。最後に、言語及びインターフェ
ース明細書303並びにアナライザ明細書319に対す
る様々な形式が考えられ、例えば、グラフィック表現を
採用し、明細書が少なくとも一部、グラフィック表現を
操作することによって作成されるようなインターフェー
スも可能である。同様に、出力321はテキストファイ
ルではなく、ソースファイル313のグラフィック表現
であっても良い。さらに、詳細な説明において示された
ように、アナライザ言語のサブ言語の特性を持つ言語は
任意の文法ツリーに使用できる。上記のような理由によ
って、この詳細な説明は、あらゆる点において解説及び
例を示すことが目的であり、限定を意図するものではな
い。本発明の範囲は詳細な説明によって定義されるべき
でなく、特許請求項によって、これと同等であるかと言
う原理に基づいて、定義されるべきものである。
【図面の簡単な説明】
【図1】一例としての独立文法ツリーを示す。
【図2】一例としてのアナライザ明細書を示す。
【図3】発見ツールのブロック図である。
【図4】言語及びインターフェース明細書内の宣言を示
す。
【図5】言語及びインターフェース明細書内のもう一つ
の宣言を示す。
【図6】言語及びインターフェース明細書内のもう一つ
の宣言を示す。
【図7】アナライザ明細書を書くために使用される言語
のシンタックスを示す。図面内の参照番号は二つの部分
から成る。下二桁は図面内の項目の番号であり、残りの
数字は項目が最初に現われる図面の番号を示す。従っ
て、参照番号201は図2内に最初に現われる項目であ
る。
フロントページの続き (72)発明者 プレムクマー デヴァンブ アメリカ合衆国 07063 ニュージャーシ ィ,ノース プレインフィールド,ウィロ ー アヴェニュー エクステンション 170

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータプログラムのソースコード
    の特定のアスペクトを分析するための方法において、該
    方法が:ソースコードが書かれた言語に対する環境内で
    生成されたプログラムに対する依存文法ツリーを受信す
    るステップ;該依存文法ツリーを該言語にも該環境にも
    依存しない独立文法ツリーに翻訳するステップ;及び該
    独立文法ツリーを該特定のアスペクトに関する情報を得
    るために必要に応じて分析するステップを含むことを特
    徴とする方法。
  2. 【請求項2】該依存文法ツリーを翻訳するステップが:
    該言語の明細書、及び該環境の該独立文法ツリーと関係
    のある部分を受信するステップ;該言語の該明細書及び
    該環境の該部分を使用してトランスレータを生成するス
    テップ;及び該トランスレータを使用して該依存文法ツ
    リーを該独立文法ツリーに翻訳するステップを含むこと
    を特徴とする請求項1の方法。
  3. 【請求項3】該言語の該明細書及び該環境の該部分をト
    ランスレータを生成するために使用する該ステップが該
    環境及び該言語に対してたった一度のみ遂行されること
    を要求されることを特徴とする請求項2の方法。
  4. 【請求項4】該独立文法ツリーを分析するステップが:
    該特定のアスペクトに関する情報を該独立文法ツリーか
    ら得る方法を示す明細書を受信するステップ;該明細書
    を使用して該特定のアスペクトに対するアナライザを生
    成するステップ;及び該アナライザを該独立文法ツリー
    に適用することによって該独立文法ツリーを分析するス
    テップを含むことを特徴とする請求項1の方法。
  5. 【請求項5】 該明細書によって示される全ての方法が
    該独立文法ツリーを分析するステップがポリノミナル時
    間にて完結できるという特性を持つことを特徴とする請
    求項4の方法。
  6. 【請求項6】 プログラムのソースコードに関する情報
    を発見するための発見ツールにおいて、該発見ツール
    が:該ソースコードを表わす第一の文法ツリー(31
    1)を該ソースコードを表わす第二の文法ツリー(10
    1)に翻訳するためのトランスレータ(305)を含
    み、該第一の文法ツリーが該ソースコードが書かれた言
    語或は該言語に対する環境或はこの両方に依存し、該第
    二の文法ツリーが該言語にも該環境にも依存せず;該ツ
    ールがさらに該ソースコードに関する情報を該第二の文
    法ツリーを分析することによって発見するための手段
    (319)を含むことを特徴とする発見ツール。
  7. 【請求項7】 該言語及び該環境の明細書に応答して該
    言語及び該環境によって要求されるトランスレータを生
    成するためのトランスレータジェネレータ(301)が
    さらに含まれることを特徴とする請求項6の発見ツー
    ル。
  8. 【請求項8】 該トランスレータジエネレータが該言語
    及び該環境に対する該トランスレータをたった一度のみ
    生成することを要求されることを特徴とする請求項7の
    発見ツール。
  9. 【請求項9】 該情報を発見するための手段が:該情報
    を該独立文法ツリーから得る方法を示す明細書(31
    8)を受信するアナライザジェネレータ(317);及
    び該明細書から該アナライザジェネレータによって生成
    されたアナライザ(319)を含み、該アナライザが該
    情報を得るために該独立文法ツリーに適用されることを
    特徴とする請求項6の発見ツール。
  10. 【請求項10】 該明細書がそれによって示される全て
    の方法がポリノミアル時間内に完結できるという特性を
    持つことを特徴とする請求項9の発見ツール。
JP4284078A 1991-10-22 1992-10-22 プログラムソースコード解析手法 Pending JPH05216681A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/781,564 US5826256A (en) 1991-10-22 1991-10-22 Apparatus and methods for source code discovery
US781564 1991-10-22

Publications (1)

Publication Number Publication Date
JPH05216681A true JPH05216681A (ja) 1993-08-27

Family

ID=25123162

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4284078A Pending JPH05216681A (ja) 1991-10-22 1992-10-22 プログラムソースコード解析手法

Country Status (5)

Country Link
US (1) US5826256A (ja)
EP (1) EP0539120B1 (ja)
JP (1) JPH05216681A (ja)
CA (1) CA2078247C (ja)
DE (1) DE69226233T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0934725A (ja) * 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法
US7711672B2 (en) * 1998-05-28 2010-05-04 Lawrence Au Semantic network methods to disambiguate natural language meaning
US8396824B2 (en) * 1998-05-28 2013-03-12 Qps Tech. Limited Liability Company Automatic data categorization with optimally spaced semantic seed terms
US20070294229A1 (en) * 1998-05-28 2007-12-20 Q-Phrase Llc Chat conversation methods traversing a provisional scaffold of meanings
US6778970B2 (en) * 1998-05-28 2004-08-17 Lawrence Au Topological methods to organize semantic network data flows for conversational applications
US7281203B2 (en) * 1998-09-29 2007-10-09 Netscape Communications Corporation Selecting a DTD for transforming malformed layout expressions into wellformed ones
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
US7509572B1 (en) * 1999-07-16 2009-03-24 Oracle International Corporation Automatic generation of document summaries through use of structured text
US7073122B1 (en) * 2000-09-08 2006-07-04 Sedghi Ali R Method and apparatus for extracting structured data from HTML pages
US7370040B1 (en) * 2000-11-21 2008-05-06 Microsoft Corporation Searching with adaptively configurable user interface and extensible query language
US7293261B1 (en) * 2001-04-25 2007-11-06 Microsoft Corporation Language-neutral representation of software code elements
US7237236B2 (en) * 2002-08-22 2007-06-26 International Business Machines Corporation Method and apparatus for automatically determining optimum placement of privileged code locations in existing code
DE10254532A1 (de) * 2002-11-22 2004-06-03 Abb Research Ltd. Verfahren und System zur wissensbasierten Transformation von textuellen Programmen, die sich auf die Softwarekonfiguration eines verteilten Leitsystems beziehen
US7219338B2 (en) * 2003-03-25 2007-05-15 Microsoft Corporation Multi-language compilation
US20050262056A1 (en) * 2004-05-20 2005-11-24 International Business Machines Corporation Method and system for searching source code of computer programs using parse trees
FR2872600B1 (fr) * 2004-07-02 2008-04-18 Thales Sa Procede de transformation de code informatique et produit/ programme d'ordinateur pour la mise en oeuvre d'un tel procede
KR100692172B1 (ko) * 2005-03-30 2007-03-12 아이티플러스 주식회사 종합 문자열 분석기 및 그 분석 방법
US8037092B2 (en) 2005-10-05 2011-10-11 International Business Machines Corporation System and method for merging manual parameters with predefined parameters
EP1903434A1 (de) * 2006-09-22 2008-03-26 Siemens Aktiengesellschaft Verfahren zur erzeugung eines softwarecodes
CN101606152A (zh) * 2006-10-03 2009-12-16 Qps技术有限责任公司 通过分类而自动匹配主体到客户的内容的机制
US8713513B2 (en) * 2006-12-13 2014-04-29 Infosys Limited Evaluating programmer efficiency in maintaining software systems
TWI448965B (zh) * 2011-06-15 2014-08-11 Tatung Co 解析程式碼的方法
US20130191809A1 (en) * 2012-01-25 2013-07-25 Microsoft Corporation Graphical representation of an order of operations
WO2016161178A1 (en) * 2015-03-31 2016-10-06 Galaxe. Solutions, Inc. System and method for automated cross-application dependency mapping
CN106155893B (zh) * 2015-04-03 2021-03-02 腾讯科技(深圳)有限公司 判断应用程序测试覆盖范围的方法及程序测试设备
US10379825B2 (en) * 2017-05-22 2019-08-13 Ab Initio Technology Llc Automated dependency analyzer for heterogeneously programmed data processing system
US10459829B2 (en) * 2017-06-07 2019-10-29 M/S. Cigniti Technologies Limited Overall test tool migration pipeline

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US5146583A (en) * 1987-09-25 1992-09-08 Matsushita Electric Industrial Co., Ltd. Logic design system for creating circuit configuration by generating parse tree from hardware description language and optimizing text level redundancy thereof
US5175856A (en) * 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
US5276881A (en) * 1990-06-25 1994-01-04 Hewlett-Packard Company ANDF producer using the HPcode-Plus compiler intermediate language

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置

Also Published As

Publication number Publication date
US5826256A (en) 1998-10-20
DE69226233T2 (de) 2000-07-13
CA2078247C (en) 1999-10-26
DE69226233D1 (de) 1998-08-20
EP0539120B1 (en) 1998-07-15
CA2078247A1 (en) 1993-04-23
EP0539120A1 (en) 1993-04-28

Similar Documents

Publication Publication Date Title
JPH05216681A (ja) プログラムソースコード解析手法
Devanbu GENOA: a customizable language-and front-end independent code analyzer
US6289502B1 (en) Model-based software design and validation
US6269475B1 (en) Interface for object oriented programming language
US5784553A (en) Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
USRE38104E1 (en) Method and apparatus for resolving data references in generated code
EP0753814B1 (en) Determining dynamic properties of programs
US7131111B2 (en) Development of manifest for java embedded server bundle
US6981249B1 (en) Methods for enhancing type reconstruction
US20020133806A1 (en) Method and apparatus for automatically inferring annotations
Devanbu GENOA—a customizable, front-end-retargetable source code analysis framework
JP2004505379A (ja) Xmlロボット
Holzmann et al. Validating SDL Specifications: an Experiment.
US5764883A (en) System and method for checking for dynamic resource misuse in a computer program
Souter et al. Incremental call graph reanalysis for object-oriented software maintenance
Mayfield et al. Using automatic memoization as a software engineering tool in real-world AI systems
Stefanescu et al. An equational framework for the flow analysis of higher order functional programs
US6792597B1 (en) Automatic consistency checking of computer programs
Jones The functions of Java bytecode
Poetzsch-Heffter Programming language specification and prototyping using the MAX System
Chapman Worst-case timing analysis via finding longest paths in SPARK Ada basic-path graphs
Terwilliger et al. PK/C++: an object-oriented, logic-based, executable specification language
Cater et al. An ASM dynamic semantics for standard ML
JPH08272623A (ja) プログラム解析装置及びプログラム解析方法
Rosendahl Abstract interpretation using attribute grammars

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20020729