JP2014211729A - 計算機、プログラム及びデータ生成方法 - Google Patents
計算機、プログラム及びデータ生成方法 Download PDFInfo
- Publication number
- JP2014211729A JP2014211729A JP2013087042A JP2013087042A JP2014211729A JP 2014211729 A JP2014211729 A JP 2014211729A JP 2013087042 A JP2013087042 A JP 2013087042A JP 2013087042 A JP2013087042 A JP 2013087042A JP 2014211729 A JP2014211729 A JP 2014211729A
- Authority
- JP
- Japan
- Prior art keywords
- syntax
- token
- character string
- tree
- syntax tree
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
Abstract
【解決手段】
ソースプログラムからソースプログラムの構造を表す木構造データを生成する計算機であって、構文要素に対応する文字列候補を外部ファイルとして格納する記憶部と、文字列の入力に対し、前記外部ファイルにアクセスし、前記文字列候補に一致する文字列ついて、該文字列候補に対応する構文要素への変換処理を実行する制御部と、を有する計算機である。
【選択図】 図5
Description
図13に、従来の、字句解析、構文解析の処理の流れを模式的に示す。字句解析器107は、ソースプログラム112を入力として、ソースプログラム112中の文字列を構文要素 (トークン)に分ける。例えば、入力するソースプログラム112を図14の1300とした場合、図15の1400が表すようなトークンの列を生成する。これは、文字列「「M」「O」「V」「E」」が入力された場合は、「MOVE」で一つのトークンを表す等トークンの定義が、字句解析器107に与えられていることから実現できるものである。
また、IDの区別を行うレベルの解析が必要な場合は、上記ではフラットな構造になっていたトークン列に対して、図16Bの構文木例1502のように、IDを表すトークン列をIDノードで束ねた構文木が必要になる。更に、IDのRead/Writeの区別を行うレベルの解析が必要な場面では、図16Cの構文木例1503のように、上記IDノードにRead/Writeの属性をつけた構文木が必要である。
本発明の他の課題及び効果は、以下の記載から明らかになる。
図1に、本発明を適用した一例である計算機100での構文解析の概要を模式的に示す。
計算機100の字句解析器107は、ソースプログラム112とトークン定義113を入力としてトークン列110を出力する。図3に示すように、トークン定義113は、トークン種別301と文字列キーワード302から成る。
以上が、計算機100における構文解析の概要説明である。
図5に、構文解析処理の全体の流れを示す。
S501で、解析器106は、カスタマイズしたトークン定義113の利用を含む字句解析を行う。本処理は、解析器106内の字句解析器107が実施する処理であり、詳細については後述する。
S502で、解析器106は、トークン読み飛ばし規則114の利用を含む基本構文解析を行う。本処理は、解析器106内の構文解析器108が実施する処理であり、詳細については後述する。
S504で、解析器106は、構文木訪問と変換処理を行う。本処理は、解析器106内の構文木訪問器109が実施する処理であり、種々の公知の方法を利用できる。詳細は、例を用いて後述する。
以上が、計算機100の構文解析の全体処理の流れの説明である。
まず、図6を用いて、「カスタマイズしたトークン定義利用を含む字句解析(図5のS501)」の処理について説明する。
S602で、字句解析器107は、先頭文字の読み込みとトークンの予測を行う。例えば、先頭文字が英字から始まっている場合と、数値から始まっている場合では、異なるトークンの予測を行う。先頭文字から判断がつかない場合は、複数文字の読み込みを行って判断を行う。本処理については種々の公知の方法を利用できる。
以上の処理を、未処理の文字列がなくなるまで実施する。
S601で、字句解析器107は、未処理の文字列「TEST」があるため(S601:Yes)、S602に進む。
S602で、字句解析器107は、先頭文字「T」を読み込み、これは英字であるため、マッチするトークンは「STRING」であると判定する。
S605で、字句解析器107は、トークン変換条件を満たすか否かを判定する。即ち、「TEST」がトークン定義113の文字列キーワード302に含まれるか否かを判定する。「TEST」は、トークン定義113の文字列キーワード302に含まれないため(S605:No)、S607へ進み、入力文字列「TEST」のトークンを、「STRING」と決定する。
S601で、字句解析器107は、未処理の文字列「MOVE」があるため(S601:Yes)、S602に進む。
S602で、字句解析器107は、先頭文字「M」を読み込み、これは英字であるため、マッチするトークンは「STRING」であると予測する。
S604で、字句解析器107は、マッチしたトークン「STRING」に変換条件があるため(S604:Yes)、S605に進む。
S606で、字句解析器107は、トークン定義113において「MOVE」が属しているトークン種別301は「STMT_HEAD」であるため、トークンを「STMT_HEAD」に変換する。
S607で、S606で変換後の「STMT_HEAD」を入力文字列「MOVE」のトークンとして決定する。
以上が、「カスタマイズしたトークン定義利用を含む字句解析(図5のS501)」の補足説明である。
S701で、構文解析器108は、未処理のトークンがあるか否かを判定し、未処理のトークンがある場合(S701:Yes)、S702に進む。未処理のトークンがない場合(S701:No)、本処理を終了する。
S703で、構文解析器108は、該当構文があるか否かを判定し、該当構文がある場合(S703:Yes)、S704に進む。該当構文がない場合(S703:No)、S708に進む。
S705で、構文解析器108は、S704でのマッチングに成功したか否かを判定し、
マッチングに成功した場合(S705:Yes)、S706に進み、マッチした構文の部分木作成と構文木111への追加を行う。S706の処理については、種々の公知の方法を利用できる。一方、マッチングに失敗した場合(S705:No)、S707に進む。
S708で、構文解析器108は、トークン読み飛ばし規則114に基づく部分木作成と構文木111への追加を行う。本処理については後述する。
以上の処理を、未処理のトークンがなくなるまで実施する。
S801で、構文解析器108は、先頭トークンのテキストがトークン読み飛ばし規則114の開始401に登録されているか否かを判定し、開始401に登録されている場合(S801:Yes)、S802に進む。開始401に登録されていない場合(S801:No)、S803に進む。
S803で、構文解析器108は、トークン読み飛ばし規則114のデフォルトの終了402に登録されているトークンの手前まで読み進める。なお、S802及びS803において、トークン読み飛ばし規則114の終了402に複数のトークンがエントリされている場合、いずれかのトークンを発見できれば良い。
S806で、構文解析器108は、読み進めたトークン列をノードで束ね、構文木111に追加する。
以上が、「トークン読み飛ばし規則に基づく部分木作成と構文木への追加(図7のS708)」の処理の説明である。
S702で、構文解析器108は、先頭トークン「STMT_HEAD」の読み込みと
構文の予測を行う。
S703で、構文解析器108は、先頭トークン「STMT_HEAD」から始まる構文がないと判断し(S703:No)、S708に進む。
S708で、構文解析器108は、トークン読み飛ばし規則114に基づく部分木作成と構文木への追加を行う。
S801で、構文解析器108は、先頭トークン「STMT_HEAD」のテキスト「MOVE」がトークン読み飛ばし規則114の開始401に登録されているため(S801:Yes)、S802に進む。
S802で、構文解析器108は、トークンを読み進め、トークン読み飛ばし規則114の終了402に登録されているトークン「STMT_HEAD」(EXEC)を発見するため(S802:Yes)、S804に進む。
S806で、構文解析器108は、読み進めたトークン列「「STMT_HEAD(MOVE)」「STRING (A)」「TO」「STRING (E)」」(図10の1001)を「STMT」ノード1005で束ね、構文木111に追加する。
S701で、構文解析器108は、未処理のトークン「STMT_HEAD」(EXEC)が存在するため(S701:Yes)、S702に進む。
S702で、構文解析器108は、先頭トークン「STMT_HEAD」の読み込みと
構文の予測を行う。
S708で、構文解析器108は、トークン読み飛ばし規則114に基づく部分木作成と構文木111への追加を行う。
S801で、構文解析器108は、先頭トークン「STMT_HEAD」のテキスト「EXEC」がトークン読み飛ばし規則114の開始401に登録されているため(S801:Yes)、S802に進む。
S805で、構文解析器108は、終了トークン「STMT_END(END−EXEC)」を読み進める。
以上が、構文木訪問器追加処理(図11)の説明である。
なお、以下の例では、前提として図3のトークン定義112及び図4のトークン読み飛ばし規則114を利用するものとし、S502までの処理により、図15の1501に示す構文木111を作成済であるものとする。
構文木訪問器(1):「「STRING」「OF」「STRING」」のパターンは、「ID」ノードを設けて束ねる。構文木訪問器(2):「「STMT_HEAD(MOVE)」「ID」「TO」「ノード」…」のパターンは、「TO」の手前の「ID」にRead属性(R)を付け、「TO」の後方にある「「ノード」…」にWrite属性(W)を付ける。「「ノード」…」は任意ノードが複数個続くことを意味する。なお、本前提は例を説明するためのものであり、必ずしも本発明がこれら前提に限定されるわけではない。
S504で、解析器106は、構文木111の訪問と変換処理を行う。即ち、構文木111中に、「「STRING」「OF」「STRING」」のパターンを発見した場合、「ID」ノードを設け、束ねる。図15の1501が表す構文木111を対象とした場合、1504が示す「「STRING(A)」「OF」「STRING(B)」」と、1505が示す「「STRING(C)」「OF」「STRING(D)」」が該当し、これらをそれぞれ「ID」ノード1506で束ね、図15の1502が表す構文木111のように変換する。その後、S503の処理に戻る。
S504で、解析器106は、構文木111の訪問と変換処理を行う。即ち、構文木111中に、「「STMT_HEAD(MOVE)」「ID」「TO」「ノード」…」のパターンを発見した場合、「TO」の手前の「ID」にRead属性(R)を付け、「TO」の後方にある「ID」にWrite属性(W)を付ける。図15の1502が表す構文木111を対象とした場合、変換後の構文木1503が示すように、ノード1507にRead属性(R)が付き、ノード1508にWrite属性(W)が付く。その後、S503の処理に戻る。
S503で、解析器106は、未処理の構文木訪問器109がないため(S503:No)、本処理を終了する。
以上が、S503及びS504の具体例である。
Claims (11)
- ソースプログラムからソースプログラムの構造を表す木構造データを生成する計算機であって、
構文要素に対応する文字列候補を外部ファイルとして格納する記憶部と、
文字列の入力に対し、前記外部ファイルにアクセスし、前記文字列候補に一致する文字列ついて、該文字列候補に対応する構文要素への変換処理を実行する制御部と、
を有する計算機。 - 請求項1に記載の計算機であって、
前記記憶部が、構文要素の読み飛ばし規則を外部ファイルとして更に格納するものであり、
前記制御部が、
前記外部ファイルにアクセスして、前記入力された文字列から構文要素の列を生成する字句解析部と、
前記外部ファイルにアクセスして、前記字句解析部が生成した構文要素の列から構文木を生成する構文解析部と、を有するものである計算機。 - 請求項2に記載の計算機であって、
前記構文解析部が、入力された構文要素の列が構文規則に合致する場合、該構文規則に応じた部分木作成及び構文木への追加処理を実行し、入力された構文要素の列が構文規則に合致しない場合、前記構文要素の読み飛ばし規則に基づき構文要素を読み進め、部分木作成と構文木への追加を実行するものである計算機。 - 請求項2に記載の計算機であって、
前記記憶部が、前記構文解析部によって生成する構文木の変換条件を定める変換条件を更に外部ファイルとして格納するものであり、
前記制御部が、
前記構文解析部によって生成された構文木について、前記外部ファイルにアクセスし、該構文木が前記変換条件に合致する場合、該変換条件に基づいて構文木を変換する構文木訪問部を更に有する計算機。 - 請求項1〜4の何れか一項に記載の計算機であって、
前記計算機が、前記外部ファイルの更新入力を受け付ける入力部を有するものである計算機。 - ソースプログラムからソースプログラムの構造を表す木構造データを生成する計算機に、
構文要素に対応する文字列候補を外部ファイルとして格納する手順と、
文字列の入力に対し、前記外部ファイルにアクセスし、前記文字列候補に一致する文字列について、該文字列候補に対応する構文要素への変換処理を実行する手順と、
を実行させるプログラム。 - 請求項6に記載のプログラムであって、
前記記憶部に、構文要素の読み飛ばし規則を外部ファイルとして更に格納する手順を実行させ、
前記変換処理を実行する手順で、
前記外部ファイルにアクセスして、前記入力された文字列から構文要素の列を生成する字句解析手順と、
前記外部ファイルにアクセスして、前記字句解析部が生成した構文要素の列から構文木を生成する構文解析手順と、を実行させるプログラム。 - 請求項7に記載のプログラムであって、
前記構文解析手順で、入力された構文要素の列が構文規則に合致する場合、該構文規則に応じた部分木作成及び構文木への追加処理を実行し、入力された構文要素の列が構文規則に合致しない場合、前記構文要素の読み飛ばし規則に基づき構文要素を読み進め、部分木作成と構文木への追加を実行する手順を実行させるプログラム。 - 請求項7に記載のプログラムであって、
前記記憶部に、前記構文解析手順によって生成された構文木の変換条件を定める変換条件を更に外部ファイルとして格納する手順と、
前記構文解析手順によって生成された構文木について、前記外部ファイルにアクセスし、該構文木が前記変換条件に合致する場合、該変換条件に基づいて構文木を変換する構文木訪問手順と、を更に実行させるプログラム。 - 請求項7〜9の何れか一項に記載のプログラムであって、
前記計算機の入力装置を介した入力に応じて、前記外部ファイルの更新を行う手順を実行させるプログラム。 - ソースプログラムからソースプログラムの構造を表す木構造データを生成するデータ生成方法であって、
計算機が、
構文要素に対応する文字列候補を外部ファイルとして記憶部に格納するステップと、
文字列の入力に対し、前記外部ファイルにアクセスし、前記文字列候補に一致する文字列ついて、該文字列候補に対応する構文要素への変換処理を実行するステップと、
を含むデータ生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013087042A JP5932707B2 (ja) | 2013-04-18 | 2013-04-18 | 計算機、プログラム及びデータ生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013087042A JP5932707B2 (ja) | 2013-04-18 | 2013-04-18 | 計算機、プログラム及びデータ生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014211729A true JP2014211729A (ja) | 2014-11-13 |
JP5932707B2 JP5932707B2 (ja) | 2016-06-08 |
Family
ID=51931457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013087042A Expired - Fee Related JP5932707B2 (ja) | 2013-04-18 | 2013-04-18 | 計算機、プログラム及びデータ生成方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5932707B2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112989345A (zh) * | 2021-03-17 | 2021-06-18 | 北京安天网络安全技术有限公司 | 一种威胁处置方法及框架 |
CN114666078A (zh) * | 2020-12-08 | 2022-06-24 | 北京中科网威信息技术有限公司 | Sql注入攻击的检测方法及系统、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02133824A (ja) * | 1988-11-14 | 1990-05-23 | Yokogawa Electric Corp | トランスレータ |
JPH02190935A (ja) * | 1989-01-19 | 1990-07-26 | Nec Corp | 構文解析ルールの組込機能を持つプログラムのコンパイル方式 |
JPH0328932A (ja) * | 1989-06-27 | 1991-02-07 | Hitachi Ltd | 拡張された言語仕様のコンパイル方式 |
JPH03268029A (ja) * | 1990-03-19 | 1991-11-28 | Fujitsu Ltd | 構文チェッカ |
JPH08272622A (ja) * | 1995-03-31 | 1996-10-18 | Hitachi Software Eng Co Ltd | プログラム変換装置 |
JPH09167095A (ja) * | 1995-12-14 | 1997-06-24 | Fujitsu Ltd | ソースプログラム解析装置 |
JPH11249903A (ja) * | 1998-02-26 | 1999-09-17 | Agency Of Ind Science & Technol | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 |
US20100023924A1 (en) * | 2008-07-23 | 2010-01-28 | Microsoft Corporation | Non-constant data encoding for table-driven systems |
JP2012504826A (ja) * | 2008-10-06 | 2012-02-23 | マイクロソフト コーポレーション | 拡張可能な構文を有するプログラミング言語 |
-
2013
- 2013-04-18 JP JP2013087042A patent/JP5932707B2/ja not_active Expired - Fee Related
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02133824A (ja) * | 1988-11-14 | 1990-05-23 | Yokogawa Electric Corp | トランスレータ |
JPH02190935A (ja) * | 1989-01-19 | 1990-07-26 | Nec Corp | 構文解析ルールの組込機能を持つプログラムのコンパイル方式 |
JPH0328932A (ja) * | 1989-06-27 | 1991-02-07 | Hitachi Ltd | 拡張された言語仕様のコンパイル方式 |
JPH03268029A (ja) * | 1990-03-19 | 1991-11-28 | Fujitsu Ltd | 構文チェッカ |
JPH08272622A (ja) * | 1995-03-31 | 1996-10-18 | Hitachi Software Eng Co Ltd | プログラム変換装置 |
JPH09167095A (ja) * | 1995-12-14 | 1997-06-24 | Fujitsu Ltd | ソースプログラム解析装置 |
JPH11249903A (ja) * | 1998-02-26 | 1999-09-17 | Agency Of Ind Science & Technol | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 |
US20100023924A1 (en) * | 2008-07-23 | 2010-01-28 | Microsoft Corporation | Non-constant data encoding for table-driven systems |
JP2012504826A (ja) * | 2008-10-06 | 2012-02-23 | マイクロソフト コーポレーション | 拡張可能な構文を有するプログラミング言語 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114666078A (zh) * | 2020-12-08 | 2022-06-24 | 北京中科网威信息技术有限公司 | Sql注入攻击的检测方法及系统、电子设备及存储介质 |
CN114666078B (zh) * | 2020-12-08 | 2022-12-20 | 北京中科网威信息技术有限公司 | Sql注入攻击的检测方法及系统、电子设备及存储介质 |
CN112989345A (zh) * | 2021-03-17 | 2021-06-18 | 北京安天网络安全技术有限公司 | 一种威胁处置方法及框架 |
CN112989345B (zh) * | 2021-03-17 | 2024-04-12 | 北京安天网络安全技术有限公司 | 一种威胁处置方法及框架 |
Also Published As
Publication number | Publication date |
---|---|
JP5932707B2 (ja) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9298453B2 (en) | Source code analytics platform using program analysis and information retrieval | |
CN114585999A (zh) | 多语言代码行补全系统 | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和系统 | |
US8364696B2 (en) | Efficient incremental parsing of context sensitive programming languages | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
CN111443964B (zh) | 更新用户界面的方法、设备和计算机可读存储介质 | |
US20230418566A1 (en) | Programmatically generating evaluation data sets for code generation models | |
JP7344259B2 (ja) | 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品 | |
KR20190015285A (ko) | Cpu 이용 및 코드 리팩토링을 위한 쿼리 최적화기 | |
CN111124379A (zh) | 页面生成方法、装置、电子设备及存储介质 | |
CN106484389B (zh) | 动作流分段管理 | |
JP6651974B2 (ja) | 情報処理装置、コンパイル方法及びコンパイラプログラム | |
JP5932707B2 (ja) | 計算機、プログラム及びデータ生成方法 | |
US10545741B2 (en) | Information processing apparatus, method of compiling, and storage medium | |
US12014155B2 (en) | Constrained prefix matching for generating next token predictions | |
US20230419036A1 (en) | Random token segmentation for training next token prediction models | |
US20230418565A1 (en) | Validating and providing proactively generated code suggestions | |
JP5808264B2 (ja) | コード生成装置及びコード生成方法及びプログラム | |
CN110928896A (zh) | 一种数据查询方法及装置 | |
CN111563363B (zh) | 一种超文本标记语言文档内容生成及解析方法 | |
US20130218928A1 (en) | Information processing device | |
JP2018173699A (ja) | テンプレート生成装置、テンプレート生成方法およびプログラム | |
US20160371066A1 (en) | Computer that performs compiling, compiling method and storage medium that stores compiler program | |
US20180011833A1 (en) | Syntax analyzing device, learning device, machine translation device and storage medium | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150428 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160120 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160202 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160317 |
|
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: 20160405 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160428 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 5932707 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |
|
LAPS | Cancellation because of no payment of annual fees |