JP2011113147A - ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム - Google Patents
ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム Download PDFInfo
- Publication number
- JP2011113147A JP2011113147A JP2009266739A JP2009266739A JP2011113147A JP 2011113147 A JP2011113147 A JP 2011113147A JP 2009266739 A JP2009266739 A JP 2009266739A JP 2009266739 A JP2009266739 A JP 2009266739A JP 2011113147 A JP2011113147 A JP 2011113147A
- Authority
- JP
- Japan
- Prior art keywords
- character
- macro
- source code
- token
- position information
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【解決手段】ソースコード2に対してマクロ展開を行って拡張文字配列110を出力するプリプロセッサ10と、拡張文字配列110に対して字句解析によってトークン配列120を出力するレキサ20と、トークン配列120に基づいて構文解析を行いAST130を生成するパーサ30とを有するソース解析プログラム1であって、プリプロセッサ10は、展開したマクロ定義の前後に特殊文字111を挿入し、さらに特殊文字111を含む各文字について位置情報112および文字種別の情報を含む拡張文字からなる拡張文字配列110を出力し、レキサ20は、拡張文字配列110を分割した文字列を対応させてトークンとし、パーサ30は、レキサ20によって生成されたトークンを含んでノードを構成する。
【選択図】図1
Description
図1は、本発明の一実施の形態であるソース解析プログラムの構成例の概要について示した図である。ソース解析プログラム1は、例えば、プリプロセッサ10、レキサ20、パーサ30、および解析部40の各プログラムを有し、ソースコード2を入力としてその記述内容についての解析を行うソフトウェアプログラムである。
図2は、プリプロセッサ10でのマクロ展開の処理の例について概要を示したフローチャートである。ソースコード2を入力して処理を開始すると、まず、ソースコード2の各文字を切り出して文字配列を生成する(S101)。次に、ソースコード2の文字配列に対して字句解析を行ってトークンを切り出し、トークン列を生成する(S102)。ここでは、一般的に正規表現などレキサ20による字句解析と同等の技術を用いて文字配列をトークンに分割する。このとき、各トークンにはソースコード2における位置(例えば、開始・終了位置)および文字種別の情報を別途保持する。
図3は、プリプロセッサ10によって出力された拡張文字配列110内の文字(拡張文字)における位置情報112の設定および識別の例について説明する図である。図中の左上のソースコード2において、3行目のマクロ呼び出し(“MUL(NN,20)”)は、プリプロセッサ10によるマクロ展開によって最終的に“10*20”に展開される。
図4は、プリプロセッサ10によって出力された拡張文字配列110内の文字列における位置情報の識別の例について説明する図である。図4の上段の例は、それぞれ、図3の例に示した拡張文字配列110について、“10”、“*”、“20”の文字列に分割したものについての位置情報の識別方法を示しており、中段および下段の例は、“10*20”の文字列についての位置情報の識別方法を示している。
図6は、プリプロセッサ10によって出力されたトークン配列120、およびAST130のノードにおける位置情報の識別の例について説明する図である。図6において、最下段のソースコード2(図1に示したものと同様)に対して、プリプロセッサ10によって生成された拡張文字配列110が示されている。また、拡張文字配列110に基づいてレキサ20によって生成されたトークン配列120、およびトークン配列120内の各トークンと拡張文字配列110内の文字との対応の例が示されている。さらに、トークン配列120に基づいてパーサ30によって生成されたAST130、およびAST130の各ノードとトークン配列120内の各トークンとの対応の例についても示されている。
10…プリプロセッサ、20…レキサ、30…パーサ、40…解析部、
110…拡張文字配列、111…特殊文字、112…位置情報、120…トークン配列、130…AST。
Claims (9)
- マクロ定義およびマクロ呼び出しを含む第1のソースコードに対して、前記マクロ呼び出しを前記マクロ定義によって展開するマクロ展開を含む前処理を行って第2のソースコードを出力するプリプロセッサと、
前記プリプロセッサによって出力された前記第2のソースコードに対して、字句解析によってトークンに分割してトークン配列を出力するレキサと、
前記レキサによって出力された前記トークン配列に基づいて構文解析を行い、抽象構文木を生成するパーサとを有するソース解析プログラムであって、
前記プリプロセッサは、前記第1のソースコードに対してマクロ展開を行う際に、展開した前記マクロ定義の前後に特殊文字を挿入し、さらに、前記特殊文字を含む各文字について、前記第1のソースコード上での位置情報、および文字種別の情報を含む拡張文字とし、前記拡張文字からなる拡張文字配列を前記第2のソースコードとして出力し、
前記レキサは、前記トークン配列を出力する際に、前記プリプロセッサによって出力された前記拡張文字配列を分割した文字列を対応させて前記トークンとし、
前記パーサは、前記抽象構文木を生成する際に、前記レキサによって生成された前記トークンを含んでノードを構成することを特徴とするソース解析プログラム。 - 請求項1に記載のソース解析プログラムにおいて、
前記プリプロセッサは、前記拡張文字に係る前記文字種別として、前記第1のソースコードにおける文字がそのまま対応する通常文字と、マクロ展開によって展開された前記マクロ定義に係る文字であるマクロ文字と、マクロ展開によって展開された前記マクロ定義の前および後に挿入される前記特殊文字であるマクロ開始文字およびマクロ終了文字を有し、
前記通常文字に係る前記位置情報としては、前記第1のソースコードにおける対応する文字の位置を設定し、前記マクロ文字に係る前記位置情報については設定せず、前記マクロ開始文字および前記マクロ終了文字に係る前記位置情報としては、それぞれ前記第1のソースコードにおける対応する前記マクロ定義に係る前記マクロ呼び出しの開始位置および終了位置を設定することを特徴とするソース解析プログラム。 - 請求項2に記載のソース解析プログラムにおいて、
前記レキサは、前記第2のソースコードに対して、字句解析によって前記トークンに分割する際に、前記マクロ開始文字については、後続の前記通常文字もしくは前記マクロ文字と同一の前記トークンに含まれるようにし、前記マクロ終了文字については、先行の前記通常文字もしくは前記マクロ文字と同一の前記トークンに含まれるようにすることを特徴とするソース解析プログラム。 - 請求項1〜3のいずれか1項に記載のソース解析プログラムにおいて、
さらに、前記パーサによって出力された前記抽象構文木を参照して解析等を行うことにより、前記第1のソースコードの記述内容についての解析を行う解析部を有し、
前記解析部は、前記抽象構文木の各ノードに含まれる前記トークンに対応する前記拡張文字の文字列に基づいて、前記各ノードに対応する前記第1のソースコードにおける位置の情報を識別することを特徴とするソース解析プログラム。 - 請求項4に記載のソース解析プログラムにおいて、
前記解析部は、前記拡張文字の文字列に対応する前記第1のソースコードにおける位置の情報を、前記拡張文字の文字列に含まれる全ての要素に係る前記拡張文字の前記位置情報によって特定される範囲の和に基づいて識別し、
前記要素は、前記マクロ開始文字と前記マクロ終了文字の最外部の組、もしくは前記組の間に含まれない前記通常文字であることを特徴とするソース解析プログラム。 - マクロ定義およびマクロ呼び出しを含む第1のソースコードに対して、前記マクロ呼び出しを前記マクロ定義によって展開するマクロ展開を含む前処理を行って第2のソースコードを出力するプリプロセッサであって、
前記プリプロセッサは、前記第1のソースコードに対してマクロ展開を行う際に、展開した前記マクロ定義の前後に特殊文字を挿入し、さらに、前記特殊文字を含む各文字について、前記第1のソースコード上での位置情報、および文字種別の情報を含む拡張文字とし、前記拡張文字からなる拡張文字配列を前記第2のソースコードとして出力し、
前記拡張文字に係る前記文字種別として、前記第1のソースコードにおける文字がそのまま対応する通常文字と、マクロ展開によって展開された前記マクロ定義に係る文字であるマクロ文字と、マクロ展開によって展開された前記マクロ定義の前および後に挿入される前記特殊文字であるマクロ開始文字およびマクロ終了文字を有し、
前記通常文字に係る前記位置情報としては、前記第1のソースコードにおける対応する文字の位置を設定し、前記マクロ文字に係る前記位置情報については設定せず、前記マクロ開始文字および前記マクロ終了文字に係る前記位置情報としては、それぞれ前記第1のソースコードにおける対応する前記マクロ定義に係る前記マクロ呼び出しの開始位置および終了位置を設定することを特徴とするプリプロセッサ。 - 請求項6に記載のプリプロセッサによって出力された前記第2のソースコードに対して、字句解析によってトークンに分割してトークン配列を出力するレキサであって、
前記レキサは、前記トークン配列を出力する際に、前記プリプロセッサによって出力された前記拡張文字配列を分割した文字列を対応させて前記トークンとし、
前記マクロ開始文字については、後続の前記通常文字もしくは前記マクロ文字と同一の前記トークンに含まれるようにし、前記マクロ終了文字については、先行の前記通常文字もしくは前記マクロ文字と同一の前記トークンに含まれるようにすることを特徴とするレキサ。 - 請求項1〜3のいずれか1項に記載のソース解析プログラムによって出力された前記抽象構文木を参照して解析等を行うことにより、前記第1のソースコードの記述内容についての解析を行う構文木解析プログラムであって、
前記抽象構文木の各ノードに含まれる前記トークンに対応する前記拡張文字の文字列に基づいて、前記各ノードに対応する前記第1のソースコードにおける位置の情報を識別することを特徴とする構文木解析プログラム。 - 請求項8に記載の構文木解析プログラムにおいて、
前記拡張文字の文字列に対応する前記ソースコードにおける位置の情報を、前記拡張文字の文字列に含まれる全ての要素に係る前記拡張文字の前記位置情報によって特定される範囲の和に基づいて識別し、
前記要素は、前記マクロ開始文字と前記マクロ終了文字の最外部の組、もしくは前記組の間に含まれない前記通常文字であることを特徴とする構文木解析プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009266739A JP5385102B2 (ja) | 2009-11-24 | 2009-11-24 | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009266739A JP5385102B2 (ja) | 2009-11-24 | 2009-11-24 | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011113147A true JP2011113147A (ja) | 2011-06-09 |
JP5385102B2 JP5385102B2 (ja) | 2014-01-08 |
Family
ID=44235457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009266739A Expired - Fee Related JP5385102B2 (ja) | 2009-11-24 | 2009-11-24 | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5385102B2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014123856A1 (en) * | 2013-02-06 | 2014-08-14 | Google Inc. | A method for modeling source code having code segments that lack source location |
CN110149800A (zh) * | 2015-04-07 | 2019-08-20 | 华为技术有限公司 | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 |
CN117111951A (zh) * | 2023-08-23 | 2023-11-24 | 北京云枢创新软件技术有限公司 | 基于使用链的宏文本展开方法、电子设备和介质 |
CN117742674A (zh) * | 2024-02-18 | 2024-03-22 | 江苏省地质测绘院 | 基于特性宏和要素特征的地理信息要素选择方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03179529A (ja) * | 1989-12-08 | 1991-08-05 | Mitsubishi Electric Corp | 言語翻訳システム |
JPH08314728A (ja) * | 1995-03-27 | 1996-11-29 | Sun Microsyst Inc | ソースプログラムをオブジェクトプログラムに変換する方法および装置 |
JPH08328904A (ja) * | 1995-03-31 | 1996-12-13 | Hitachi Software Eng Co Ltd | プログラム開発支援装置 |
JP2007265095A (ja) * | 2006-03-29 | 2007-10-11 | Hitachi Software Eng Co Ltd | ソースプログラム検証プログラム |
-
2009
- 2009-11-24 JP JP2009266739A patent/JP5385102B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03179529A (ja) * | 1989-12-08 | 1991-08-05 | Mitsubishi Electric Corp | 言語翻訳システム |
JPH08314728A (ja) * | 1995-03-27 | 1996-11-29 | Sun Microsyst Inc | ソースプログラムをオブジェクトプログラムに変換する方法および装置 |
JPH08328904A (ja) * | 1995-03-31 | 1996-12-13 | Hitachi Software Eng Co Ltd | プログラム開発支援装置 |
JP2007265095A (ja) * | 2006-03-29 | 2007-10-11 | Hitachi Software Eng Co Ltd | ソースプログラム検証プログラム |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273109B (zh) * | 2013-02-06 | 2020-11-10 | 谷歌有限责任公司 | 对源代码建模的方法和系统以及使用数据模型的方法 |
US9116780B2 (en) | 2013-02-06 | 2015-08-25 | Google Inc. | Method for modeling source code having code segments that lack source location |
CN104969188A (zh) * | 2013-02-06 | 2015-10-07 | 谷歌公司 | 用于对具有缺少源位置的代码段的源代码建模的方法 |
AU2014215529B2 (en) * | 2013-02-06 | 2015-12-17 | Google Llc | A method for modeling source code having code segments that lack source location |
JP2016509737A (ja) * | 2013-02-06 | 2016-03-31 | グーグル インコーポレイテッド | ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法 |
CN107273109A (zh) * | 2013-02-06 | 2017-10-20 | 谷歌公司 | 对源代码建模的方法和系统以及使用数据模型的方法 |
WO2014123856A1 (en) * | 2013-02-06 | 2014-08-14 | Google Inc. | A method for modeling source code having code segments that lack source location |
CN110149800A (zh) * | 2015-04-07 | 2019-08-20 | 华为技术有限公司 | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 |
CN110149800B (zh) * | 2015-04-07 | 2021-12-14 | 华为技术有限公司 | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 |
CN117111951A (zh) * | 2023-08-23 | 2023-11-24 | 北京云枢创新软件技术有限公司 | 基于使用链的宏文本展开方法、电子设备和介质 |
CN117111951B (zh) * | 2023-08-23 | 2024-03-15 | 北京云枢创新软件技术有限公司 | 基于使用链的宏文本展开方法、电子设备和介质 |
CN117742674A (zh) * | 2024-02-18 | 2024-03-22 | 江苏省地质测绘院 | 基于特性宏和要素特征的地理信息要素选择方法 |
CN117742674B (zh) * | 2024-02-18 | 2024-04-26 | 江苏省地质测绘院 | 基于特性宏和要素特征的地理信息要素选择方法 |
Also Published As
Publication number | Publication date |
---|---|
JP5385102B2 (ja) | 2014-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7958493B2 (en) | Type inference system and method | |
US8838440B2 (en) | Generating parser combination by combining language processing parsers | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US20040010754A1 (en) | System and method for transformation of XML documents using stylesheets | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
JPH07234790A (ja) | プログラム変換処理装置およびプログラム変換処理方法 | |
JP5385102B2 (ja) | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム | |
Fedorchenko et al. | Equivalent transformations and regularization in context-free grammars | |
US7065753B2 (en) | Method, system and computer program for syntax validation | |
Lefebvre | An Optimized Parsing Algorithm Well Suited to RNA Folding. | |
Sargsyan et al. | Scalable and accurate clones detection based on metrics for dependence graph | |
KR102614967B1 (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
JP5385103B2 (ja) | マクロ展開方法およびプリプロセッサ | |
JP6502044B2 (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
JP2009080681A (ja) | プログラム構造解析方法及び装置 | |
CN106873973B (zh) | 一种基于api文档的约束自动生成方法 | |
Sassa et al. | Rie, a compiler generator based on a one‐pass‐type attribute grammar | |
JP3584204B2 (ja) | 原始プログラム自動変換装置 | |
JP5181788B2 (ja) | ソースプログラムの言語変換装置、方法及びプログラム | |
JP3194372B2 (ja) | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 | |
Pettorossi et al. | Chop-and-Expand Parsers for Context-Free Languages | |
CN114237607A (zh) | 不可达语句识别方法、C语言与Java转换方法及装置 | |
Yang | A fast general parser for automatic code generation | |
JP2004246924A (ja) | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120913 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130625 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130730 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130912 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20131001 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131003 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |