JP5338487B2 - 構文解析装置、構文解析方法、及びプログラム - Google Patents

構文解析装置、構文解析方法、及びプログラム Download PDF

Info

Publication number
JP5338487B2
JP5338487B2 JP2009134056A JP2009134056A JP5338487B2 JP 5338487 B2 JP5338487 B2 JP 5338487B2 JP 2009134056 A JP2009134056 A JP 2009134056A JP 2009134056 A JP2009134056 A JP 2009134056A JP 5338487 B2 JP5338487 B2 JP 5338487B2
Authority
JP
Japan
Prior art keywords
tag
analysis
text
unit
parsing
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.)
Expired - Fee Related
Application number
JP2009134056A
Other languages
English (en)
Other versions
JP2010282347A (ja
Inventor
淳嗣 酒井
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2009134056A priority Critical patent/JP5338487B2/ja
Publication of JP2010282347A publication Critical patent/JP2010282347A/ja
Application granted granted Critical
Publication of JP5338487B2 publication Critical patent/JP5338487B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Machine Translation (AREA)
  • Document Processing Apparatus (AREA)

Description

本発明は、マークアップ言語で記述されたテキストを構文解析する技術に関する。
テキストファイルに、文章とともに、その文章の構造やデザイン、レイアウトなどを記述するための言語としてマークアップ言語が知られている。このマークアップ言語では、文章の構造やレイアウトなどがタグと呼ばれる文字列で指定される。
このマークアップ言語の使用例として、コンピュータ間の相互通信時には、XML(Extensible Markup Language)形式で情報をやりとりする場面が増えている。
XMLの文法は非特許文献1で規定されている。XMLでは、用途に応じてタグの種類を自在に規定することができるため、さまざまなアプリケーション分野でコンピュータ間通信の記述形式として用いられる。
また、ウェブブラウザで閲覧するウェブページを記述するために広く用いられているHTML(Hyper Text Markup Language)も、XML同様、マークアップ言語である。HTMLでは、非特許文献2に記載されているように、タグの種類が予め規定されている。
マークアップ言語で記述されたテキストをコンピュータ内で処理する際は、コンピュータは、そのテキストをコンピュータが扱いやすい内部形式に変換した上で保持してから処理を開始する。この内部形式として、一般にツリー状のデータ構造がよく用いられる。
マークアップ言語で使用されるタグは、<AA>・・・</AA>のように開始タグと終了タグの対になっており、この対は入れ子にすることができる。タグの対の入れ子関係を親子関係とみれば、テキスト全体のタグ構造はツリー形式で表現できる。コンピュータ内で、内部形式がツリー構造のデータとして保持されることが多いのはそのためである。
マークアップ言語で記述されたテキストをコンピュータが読み込み、コンピュータ内部形式に変換する処理を、パージング(Parsing)と呼ぶ。XML形式で、互いにデータを送受信するコンピュータシステムや、HTMLを扱うウェブブラウザでは、このパージングは必要不可欠な処理である。
ところで、近年では、コンピュータ内で演算処理をつかさどるCPU(Central Processing Unit中央演算処理ユニット)の処理クロックの高速化は頭打ちであり、複数のCPUを使った並列処理によりシステム全体の処理能力を高める方式が注目されている。マークアップ言語のパージングを並列処理により高速化することができれば、今後いっそうの普及が見込まれるマルチCPUやマルチコア(以下単に複数CPUと記す)を用いたシステムにおいて、その並列処理能力を十分に引き出し、システム全体の高速化に寄与できると考えられる。
パージングは、入力されたテキストを先頭から順に読みながら解析する処理であるため、そのままでは本質的に逐次処理である。複数のCPUを利用してパージングする場合、逐次処理を並列化して処理するための工夫が必要となる。
非特許文献3では、前処理と本処理の二段構成による方式を論じている。まず、コンピュータは、前処理として、テキストを解析してツリー構造だけを求める。後段の本処理では、コンピュータは、このツリー構造に基づいて、テキストをいくつかの部分に分解し、分解した各部を複数CPUによって並列処理する。コンピュータは、前処理では、詳細な字句解析を省略し、データ構造の解析に限定するので、高速に処理できる。このように、比較的処理時間がかかる本処理部を並列処理することで、全体としてパージング処理性能を高めることができる。
非特許文献4では、非特許文献3の方式を更に改良し、前処理におけるタグ対応関係の解析をも並列処理できる方式を述べている。非特許文献4に記載された発明は、前処理部で字句解析に用いられる状態遷移機械を変形することで、コンピュータがテキスト中の任意部分からの字句解析を開始することを可能にしている。このため、コンピュータは、入力されたテキストを複数の断片に分割し、それらに対して並列に字句解析を行うことができる。その後、コンピュータは、解析結果を突き合わせて、それらを先頭から順につなぐ。このようにして前処理部全体の処理が完了する。
特許文献1には、複数のパージング処理部を用意しておき、ある一つのパージング処理部で入力テキストの構文解析中にパージング不能な入力に遭遇すると、別のパージング処理部に処理を依頼する方式が記載されている。
特開平11―65853号公報
ワールドワイドウェブコンソーシアム(W3C),Extensible Markup Language(XML)1.0,W3C Recommendation 26 November 2008 D.Raggett/W3C,"Getting started with HTML",http://www.w3.org/MarkUp/Guide/,2005 W.Lu他, "A Parallel Approach to XML Parsing", 7th IEEE/ACM International Conference on Grid Computing,2006 Yinfei Pan他, "Simultaneous transducers for data−parallel XML parsing", IEEE International Symposium on Parallel and Distributed Processing,2008
しかし、非特許文献3、4や、特許文献1に開示された技術では、パージング処理を並列化しても処理性能が十分 に向上しない場合があった。
非特許文献3に記載されたコンピュータでは、前処理が完了してからでないと、本処理を開始できない。このため、このコンピュータでは、テキストを入力してから、ツリーが出力されるまでのレイテンシが長くなってしまう。
非特許文献4に記載されたコンピュータでは、前処理自体において、並列に行われた解析結果を突き合わせて、テキスト全体に対する正しいデータ構造を得る作業が必要である。このつき合わせ作業が完了するまでは、コンピュータは本処理が開始できず、本処理が開始されないとツリーも生成されない。このため、この方式でもレイテンシが長いという問題が生じる。
特許文献1に開示された方式では、テキスト内で同じ文法しか使用されない場合は、並列処理が全く行われず、スループットが向上しない。
本発明は、マークアップ言語の構文解析において、並列化により、文法に関わらず、スループットおよびレイテンシを向上することを目的とする。
上記目的を達成するために、本発明の構文解析装置は、割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおけるタグの位置を取得するタグ位置取得手段と、前記タグ位置取得手段による前記字句解析と並行して、割り当てられたリソースを使用して、該字句解析が終わっている部分のうち、前記タグ位置取得手段により取得された前記タグの位置で区切られた前記テキストのそれぞれの部分を並列に構文解析する並列解析手段と、前記タグ位置取得手段による前記字句解析の処理速度をできるだけ速くし、前記テキストにおける、該字句解析が終わり、前記構文解析手段による前記構文解析が終わっていない部分の文字数を所定の範囲内にするように、前記タグ位置取得手段に割り当てるリソース量と前記並列解析手段に割り当てるリソース量とを調整する調整手段と、を有する。
本発明の構文解析方法は、タグ位置取得手段が、割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおけるタグの位置を取得し、並列解析手段が、前記タグ位置取得手段による前記字句解析と並行して、割り当てられたリソースを使用して、該字句解析が終わっている部分のうち、前記タグ位置取得手段により取得された前記タグの位置で区切られた前記テキストのそれぞれの部分を並列に構文解析し、調整手段が、前記テキストにおける、前記タグ位置取得手段により前記字句解析が行われている位置から、前記並列解析手段により前記構文解析が行われている位置を引いた値が、正の値で所定の範囲内であり、且つ前記構文解析の処理速度ができるだけ速くなるように、該タグ位置取得手段と該並列解析手段とに割り当てるリソースの割合を調整する、構文解析方法である。
本発明のプログラムは、コンピュータに、割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおけるタグの位置を取得するタグ位置取得手順、前記タグ位置取得手順における前記字句解析と並行して、割り当てられたリソースを使用して、該字句解析が終わっている部分のうち、前記タグ位置取得手順で取得された前記タグの位置で区切られた前記テキストのそれぞれの部分を並列に構文解析する並列解析手順、及び前記タグ位置取得手順における前記字句解析の処理速度をできるだけ速くし、前記テキストにおける、該字句解析が終わり、前記構文解析手順における前記構文解析が終わっていない部分の文字数を所定の範囲内にするように、前記タグ位置取得処理に割り当てるリソース量と前記並列解析処理に割り当てるリソース量とを調整する調整手順、を実行させるためのプログラムである。
本発明によれば、構文解析装置は、テキストを字句解析してタグの位置を取得し、並行して、タグで区切られたそれぞれの部分を並列に構文解析し、字句解析と構文解析とに割り当てるリソース量を調整する。構文解析装置は、タグ位置に基づいて並列解析するので、文法に関わらずに並列解析でき、スループットが向上する。また、構文解析装置は、字句解析、構文解析を並行して行い、字句解析において各部分の解析結果を突き合わせる必要がないので、レイテンシが小さくなる。
本発明の第1の実施形態の構文解析装置の一構成例を示すブロック図である。 本発明の第1の実施形態のXMLテキストの一例である。 本発明の第1の実施形態の字句解析部の状態遷移図である。 本発明の第1の実施形態のタグ一時記憶部の一構成例を示す図である。 本発明の第1の実施形態の先行解析表の一例である。 (a)本発明の第1の実施形態の構文解析方法を説明するための図である。(b)本発明の第1の実施形態のXMLツリーの一例を示す図である。 本発明の第1の実施形態の構文解析装置の動作を示すシーケンス図である。 本発明の第1の実施形態の要素構文解析処理を示すフローチャートである。 本発明の第1の実施形態の粒度推定処理を示すフローチャートである。 本発明の第1の実施形態の例外処理を示すフローチャートである。 本発明の第1の実施形態の主パージングの動作を示すシーケンス図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。(d)本発明の第1の実施形態のXMLツリーの一例を示す図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。(d)本発明の第1の実施形態のXMLツリーの一例を示す図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。(d)本発明の第1の実施形態のXMLツリーの一例を示す図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。 本発明の第1の実施形態のXMLツリーの一例を示す図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。 本発明の第1の実施形態のXMLツリーの一例を示す図である。 (a)本発明の第1の実施形態のパージングの進度の一例を示す図である。(b)本発明の第1の実施形態のタグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第1の実施形態の先行解析表の記載内容の一例を示す図である。 本発明の第1の実施形態のXMLツリーの一例を示す図である。 本発明の第1の実施形態のパージングの進度の一例を示す図である。 本発明の第1の実施形態のXMLツリーの一例を示す図である。 本発明の第2の実施形態の構文解析装置の一構成例を示すブロック図である。 本発明の第2の実施形態の先行パージング部の一構成例を示すブロック図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の主タグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第2の実施形態の副タグ一時記憶部内の位置情報の一例を示す図である。(d)本発明の第2の実施形態の先行解析表の記載内容の一例を示す図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の主タグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第2の実施形態の副タグ一時記憶部内の位置情報の一例を示す図である。(d)本発明の第2の実施形態の先行解析表の記載内容の一例を示す図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の副タグ一時記憶部内の位置情報の一例を示す図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の主タグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第2の実施形態の副タグ一時記憶部内の位置情報の一例を示す図である。(d)本発明の第2の実施形態の先行解析表の記載内容の一例を示す図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の主タグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第2の実施形態の先行解析表の記載内容の一例を示す図である。 (a)本発明の第2の実施形態の先行パージングの進度の一例を示す図である。(b)本発明の第2の実施形態の主タグ一時記憶部内の位置情報の一例を示す図である。(c)本発明の第2の実施形態の先行解析表の記載内容の一例を示す図である。 本発明の第3の実施形態の構文解析装置の一構成例を示すブロック図である。 本発明の第4の実施形態の構文解析装置の一構成例を示すブロック図である。
(第1の実施形態)
本発明を実施するための第1の実施形態について図面を参照して詳細に説明する。
図1は、本実施形態の構文解析装置1の一構成例を示すブロック図である。構文解析装置1は、入力されたXMLテキストのデータ構造を解析する装置である。同図を参照すると、構文解析装置1は、入力部10、先行パージング部11、主パージング部12、先行パージング実行論理CPU13、主パージング実行論理CPU群14、進度調整部15、および出力部16を有する。
入力部10は、入力一時記憶部102を有する。入力部10は、XMLで記述されたXMLテキスト101を、入力一時記憶部102に読み込み、先行パージング部11および主パージング部12に入力する。入力部10は、例えば、例えばOS(Operating System)のファイルオープンシステムコールやネットワーク通信システムコールを用い、XMLテキスト101を入力一時記憶部102に読み込む。入力部10は、XMLテキスト101の全部を読み込んでもよいし、パージングに必要な部分を含む範囲で、XMLテキスト101の一部だけを読み込んでもよい。
先行パージング部11は、字句解析部111、タグ一時記憶部112、およびタグ対応登録部113、および先行パージング進捗情報114を有する。
先行パージング部11は、新たにXMLテキスト101の処理を始める際に、字句解析部111、タグ一時記憶部112、および先行パージング進捗情報114を初期化する。初期化により、字句解析部111は初期状態、すなわち、入力されたテキストの先頭位置から字句解析を開始する状態となる。
字句解析部111は、入力一時記憶部102に記憶されたXMLテキスト101の先頭から順に文字を取得し、XML文法に沿った字句解析を行う。字句解析部111で使用されるXML文法は、XML規格で規定されている開始タグと終了タグとを認識できる範囲に絞った、XML本来の文法の簡略版の文法である。この簡略版の文法については後述する。
また、字句解析部111は、XMLテキスト101中で、現在字句解析を行っている位置、すなわち字句解析の進度を示す情報を先行パージング進捗情報114として保持し、その値を適宜更新する。ここで、適宜更新の頻度は、字句解析手段111が入力一時記憶部102から文字を1つ取得するたびに更新するという頻度でもよいし、開始タグないし終了タグを発見するたびに更新する等の、やや低頻度の更新であってもよい。
字句解析部111は、字句解析において、開始タグを発見すると、その開始タグの位置を示す位置情報をタグ一時記憶部112に格納する。
ここで、開始タグの位置とは、XMLテキスト101において開始タグの出現位置を一意に特定するに足りる情報であって、例えば、テキストの先頭から文字単位に数えた、開始タグの先頭文字のオフセット(変位)値を位置として用いることができる。
字句解析部111は、字句解析において、終了タグを発見したとき、タグ一時記憶部112から、最後に格納された開始タグの位置情報を取り出す。取り出された位置情報は、タグ一時記憶部112から削除される。そして、字句解析部111は、取り出した位置情報の示す開始タグの位置と、発見した終了タグの位置との組を、引数としてタグ対応登録部113を呼び出し、この組をタグ対応登録部113に格納する。
ここで、終了タグの位置とは、XMLテキスト101において終了タグの出現位置を一意に特定するに足りる情報であって、例えば、テキストの先頭から文字単位に数えた、終了タグの最終文字のオフセット(変位)値を位置として用いることができる。
マーキング言語においては、開始タグ、文章、対応する終了タグの順で記述される。同じ属性の開始タグ、終了タグの組の間に、別の属性の開始タグ、終了タグの組を挿入することもできるが、文法上、同じ属性の開始タグ、終了タグの組の間に、別の属性の開始タグ、終了タグのいずれか一方のみが挿入されることはない。このため、複数の属性の開始タグ、終了タグが入れ子構造となっている場合、字句解析部111が、先頭から順に字句解析を行い、終了タグが出現したとき、その時点を基準として直近に出現した開始タグが、その終了タグと対になる開始タグに相当する。
従って、字句解析部111が、開始タグが出現するたびにタグ一時記憶部112に格納しておき、終了タグが出現した時点で、タグ一時記憶部112に最後に格納した開始タグの位置を取り出した場合、取り出した位置の開始タグが、出現した終了タグと対応するタグに該当することになる。
タグ一時記憶部112は、タグ一時記憶部112は、後入れ先出し(LIFO;Last−In−First−Out)方式で開始タグの位置を示す位置情報を複数、記憶する。すなわち、時系列に沿って複数の位置情報がタグ一時記憶部112に記憶されているときに、字句解析部111が、そこから位置情報を1つ取り出すと、もっとも遅い時刻(直近)に記憶された位置情報が取り出される。字句解析部111が取り出し操作を行うと、取り出された情報はタグ一時記憶部112から削除される。タグ一時記憶部112は、例えば、スタック構造を用いて実現することができる。
タグ対応登録部113は、字句解析部111で求められた開始タグの位置と終了タグの位置との各組を、先行解析表1131に記載する。
先行解析表1131は、例えば、開始タグ位置をキーとし、それに対応する終了タグ位置を値とする連想記憶装置である。
ここで、開始タグの位置も、終了タグの位置も整数であるから、この連想記憶装置は、開始タグ位置の整数値を適当なハッシュ関数にかけ、その値をインデックス(添字)とする整数配列として、コンピュータ上に容易に実現することができる。
タグ対応登録部113は、字句解析部111により、一組の開始タグおよび終了タグの位置が引数として呼び出されると、開始タグの位置をキーとして先行解析表1131を検索する。該当するデータエントリが存在しなければ、タグ対応登録部113は、その開始タグの位置をキーとし、終了タグの位置を値とする新たなデータエントリを先行解析表1131に書き込む。
開始タグの位置をキーとする検索の結果、もし該当するデータエントリが既に存在すれば、タグ対応登録部113は、新たな登録は行わず、呼出元である字句解析部111にエラーを通知する。
図2に、XMLテキスト101の記載内容の一例を示す。同図に示すように、XMLテキスト101には、文章と、その文章の構造やレイアウトを指定するタグとが、記述される。同図においては、XMLテキスト101を、20文字ごとに折り返し、5列ごと、5行ごとに点線で区切っている。20文字ごとに折り返して記載しているのは読みやすさのためであり、XMLテキスト101は、20文字ごとに改行されているとは限らない。
例えば、開始タグとして、「<AA>」、「<BB>」などが記述される。終了タグとして、「<AA>」に対応する「</AA>」や、「<BB>」に対応する「</BB>」などが記述される。これらの開始タグと終了タグとの間に、「text fоr BB」などの文章が記述される。
字句解析部111により、テキストの先頭を基準として、開始タグを構成する文字列のうち、「<」の文字のオフセットが開始タグの位置として取得される。また、終了タグを構成する文字列のうち、「>」の次の文字のオフセットが開始タグの位置として取得される。
例えば、開始タグ「<AA>」における「<」の文字は、テキストの先頭の文字である。これに対応する終了タグ「</AA>」における「>」の次の文字は、テキストの先頭から数えて225番目の文字である。従って、タグ対応登録部113には、これらの開始タグ、終了タグの位置の組として、(0、225)の組が登録される。
ここで、字句解析部111の説明で言及した簡略版のXML文法について説明する。この簡略版のXML文法は、その文法に基づいて、字句解析部111が、開始タグと終了タグを認識できる範囲で、十分高速動作できるものが望ましい。また、簡略版の文法では、開始タグや終了タグの属性名(例えば、開始タグ”<AA>”における名前”AA”)の対応付けは無視してよい。その理由は、先行パージング部11は、主パージング部12の動作よりも十分先行してタグの対応関係を見つけ出す必要があるためである。また、主パージングにて正式なXML解析を行うので先行パージングでは必ずしもタグの中身(属性)のチェックを行う必要が無いためである。
この簡略版の文法に基づき、字句解析部111は、例えば、図3に示す状態遷移図に従って動作する有限状態機械(有限オートマトン)で実現できる。同図において、初期状態は状態S1である。
状態S1において、字句解析した文字が、「s」、「>」、「/」、「!」、「’」、または「”」であれば、字句解析部111は、状態S1に遷移する。状態S1において、字句解析した文字が、「<」であれば、字句解析部111は、状態S2に遷移する。
ここで、「s」はXML文法で定義される空白文字(スペース、復帰、改行、タブを表す文字のいずれか)である。
状態S2において、字句解析した文字が「s」であれば、字句解析部111は、状態S2に遷移し、「/」であれば、字句解析部111は、状態S3に遷移する。また、状態S2において、字句解析した文字が「x」であれば、字句解析部111は、開始タグ(「starttag」)を発見したときの処理を行い、状態S4に遷移する。すなわち、開始タグの位置をタグ一時記憶部112に格納する。状態S2において、字句解析した文字が「!」であれば、字句解析部111は、状態S8に遷移する。
ここで、「x」は「<」、「>」、「/」、「!」、「’」、「”」、および空白文字以外の有効文字である。
状態S3において、字句解析した文字が「x」であれば、字句解析部111は、状態S3に遷移し、「>」であれば、終了タグ(「endtag」)を発見したときの処理をし、状態S1に遷移する。すなわち、字句解析部111は、一時記憶部112から、開始タグの位置を読み出し、終了タグの位置とともに、タグ対応登録部113に格納する。
状態S4において、字句解析した文字が「x」であれば、字句解析部111は、状態S4に遷移し、「>」であれば、状態S1に遷移する。状態S4において、字句解析した文字が「/」であれば、字句解析部111は、状態S5に遷移し、「”」であれば、状態S6に遷移する。状態S4において、字句解析した文字が「’」であれば、字句解析部111は、状態S7に遷移する。
状態S5において、字句解析した文字が「>」であれば、字句解析部111は、終了タグを発見したときの処理をし、状態S1に遷移する。
状態S6において、字句解析した文字が「s」、「>」、「/」、「!」、「’」、または「x」であれば、字句解析部111は、状態S6に遷移し、「”」であれば、状態S4に遷移する。
状態S7において、字句解析した文字が「s」、「>」、「/」、「!」、「”」、または「x」であれば、字句解析部111は、状態S7に遷移し、「’」であれば、状態S4に遷移する。
状態S8において、字句解析した文字が「s」、「<」、「/」、「!」、「’」、「”」、または「x」であれば、字句解析部111は、状態S8に遷移し、「>」であれば、状態S1に遷移する。
図4は、タグ一時記憶部112の一構成例を示す図である。同図に示すように、タグ一時記憶部112には、LIFO方式で、各開始タグの位置を示す位置情報が格納される。
例えば、タグ一時記憶部112に「<AA>」、「<CC p=”fоо”>」、「<DD>」の順で、これらの開始タグの位置情報が格納された状態について考える。字句解析部111が、このタグ一時記憶部112から位置情報を取り出す場合、最も遅くに格納された「<DD>」の位置情報が取り出され、その位置情報がタグ一時記憶部112から削除される。
図5は、先行解析表1131に記載される内容をまとめた表である。同図を参照すると、先行解析表1131には、開始タグの位置と、終了タグの位置とが対応付けて記載される。先行解析表1131の各行(データエントリ)に記載された値が、開始タグの位置と、そのタグに対応する終了タグの位置との組である。終了タグが出現した時点で、その終了タグの位置と、対応する開始タグの位置とが格納されるので、同図に示すように、各データエントリにおいて開始タグの位置、終了タグの位置は、必ず対になって記載され、いずれか一方のみが記載されることはない。
図5の先行解析表1131では、開始タグの位置の小さい順に、データエントリが並んでいる。しかし、これは、見やすさ、あるいは検索のしやすさのために整列したものであり、整列は必ずしも必要ではない。整列方法についても、開始タグの大きい順に整列するなど、任意の方法を使用できる。
次に、図1を参照して主パージングについて説明する。同図を参照すると、主パージング部12は、構文解析部121、粒度推定部122、並列化部123、内部表現生成部124、および主パージング進捗情報125を有する。
主パージング部12は、新しく入力XMLテキストの処理を始める際に、構文解析手段121、内部表現生成部124、および主パージング進捗情報125を初期化する。初期化により、構文解析部121は初期状態、すなわち入力されたテキストの先頭位置から解析を開始する状態となる。
パージング実行論理CPU群14における論理CPUが、構文解析部121を呼び出し、構文解析部121は、XMLテキスト101の先頭から順にXML文法に沿った構文解析を行う。構文解析部121による構文解析は、字句解析部111による字句解析と並行して行われる。
また、構文解析部121は、XMLテキスト101中で、現在構文解析を行っている位置を主パージング進捗情報125として保持し、その値を適宜更新する。
構文解析部121で使用されるXML文法は、先行パージング部11内の字句解析部111で用いられる簡略版文法ではなく、上記非特許文献1に記載されているXML規格に沿った正式なXML文法である。
コンピュータプログラミング言語の文法分類でみると、XML文法はLL(1)文法に属する。LL(1)に属する文法は、BNF(Backus-Naur Form)と呼ばれる形式で記述することができ、そのBNF記述から当該文法に対する構文解析プログラムを作成する標準的な手順が存在する。例えば、「中田育男,『コンパイラ』,産業図書,ISBN4−7828−5057−3, 5.4.3節から5.4.5節まで」(以下、「非特許文献5」という)にLL(1)構文解析手順の作成法が説明されている。
上述したように、上記非特許文献1にはXMLの各構文規則のBNF記述が記載されている。構文解析部121は、上記非特許文献1、5等に記載されたコンパイラ一般技術の説明とあわせた、XML文法の各構文規則に対するLL(1)構文解析手順を利用することにより、XML文法全体に関する構文解析を行う。
ここで、単一CPU向けXML構文解析における、非終端記号「要素(element)」の構文解析手順について説明する。上記非特許文献1を参照すると、XML文法における非終端記号「要素」の構文規則は下記に示すようなBNFで定義されている。
(XMLにおける要素の構文規則)
element::=EmptyElemTag
|STag content ETag
ここで、「element」は「要素」であり、「EmptyElemTag」は、「空き要素タグ」である。「STag」は、「開始タグ」であり、「content」は、「要素の内容」であり、「ETag」は、「終了タグ」である。
このBNFは、XML文法上、「要素」の概念には、「空き要素タグ」が含まれること、また、「要素」の概念には、「開始タグ」、「要素の内容」、「終了タグ」を順にならべたものが含まれることを意味している。
構文解析部121が、この空き要素タグ以外の要素の構文解析を開始するとき、粒度推定部122を呼び出し、その要素の開始タグの位置を引数として与える。
粒度推定部122は、先行解析表1131を参照して、引数と一致する開始タグの位置が先行解析表1131に登録されているか否かを検索する。引数と一致する開始タグの位置が登録されていれば、粒度推定部122は、その開始タグの位置と、対応する終了タグの位置との差(以下、「粒度」という)を構文解析部121に返す。
引数と一致する開始タグの位置が登録されていなければ、粒度推定部122は、粒度が不明である旨を構文解析部121に返す。
粒度が所定の閾値に満たない場合、または粒度が不明である場合、構文解析部121は、「開始タグ」以降の「要素の内容」、および「終了タグ」を構文解析する。
粒度が所定の閾値以上であれば、構文解析部121は、並列化部123を呼び出し、新しい論理CPUに、粒度が閾値以上の「要素の内容」の部分を解析させるように指示する。並列化部123は、構文解析装置1のリソース内において未使用の論理CPUを主パージング実行論理CPU群14に追加する。追加された論理CPUは、構文解析部121を呼び出す。
以下、並列化部123が呼び出された時点で主パージングを実行していた論理CPUを「親論理CPU」といい、親論理CPUの指示により新たに追加された論理CPUを「子論理CPU」という。
親論理CPUが実行する構文解析部121が、「開始タグ」に対応する「終了タグ」以降の構文解析を行うとともに、追加された子論理CPUが、構文解析部121を呼び出し、指示された「要素の内容」を構文解析する。子論理CPUは、指示された「要素の内容」の構文解析が終了後に解放される。
ここで、子論理CPUが追加された場合、前述した主パージング進捗情報125として保持される位置は、親論理CPUによる構文解析が行われる位置である。つまり、並列して行われる構文解析の進行位置のうち、最大値を示す情報が主パージング進捗情報125として保持される。
構文解析部121は、「終了タグ」を解析したとき、内部表現生成部124を呼び出す。内部表現生成部124は、構文解析の結果に基づいて、XMLテキスト101を、内部表現であるXMLツリー161に変換する。
上記非特許文献1を参照すると、XML文法の非終端記号「要素の内容」の構文規則右辺は非終端記号「要素」を含んでおり、LL(1)構文解析手順では「要素」の解析と「要素の内容」の解析は相互再帰になる。
上述した「要素」の並列処理手順をそのまま適用すると、「要素」がその内部に、別の「要素」を入れ子構造で持っている場合、「要素の内容」の構文解析を始めた子論理CPUが再度、新たな子論理CPUを追加して入れ子構造を解析する。このため、子論理CPUの追加が再帰的に繰り返される可能性がある。しかし、入れ子構造であるから、その「要素の内容」のサイズは外側から内側に向かうにつれ小さくなり、サイズが閾値以下となった時点で再帰が停止するので、再帰が無限に連鎖することは無い。
先行パージング実行論理CPU13は、先行パージング部11において、先行パージングを実行する論理CPUである。
パージング実行論理CPU群14は、主パージング部12において主パージングを実行する1組以上の論理CPUの集合(論理CPU141、142など)である。
ここで論理CPUとは、コンピュータシステムにおいて、与えられたデータに対して与えられた手順に沿って処理を進める主体である。例えば、マルチタスクコンピュータシステムにおけるスレッドや、LWP(Low Weight Process:軽量プロセッサ)が論理CPUに相当する。
進度調整部15は、CPU配分決定部151およびCPU配分制御部152を有する。
CPU配分決定部151は、先行パージング部11、および主パージング部12が新しくXMLテキスト101の処理を始める際、各部に、予め定められたCPU資源を割り当てる。
CPU配分決定部151は、先行パージング進捗情報114および主パージング進捗情報125を取得し、それらの情報の示す先行パージングの進度と、主パージングの進度とを比較する。CPU配分決定部151は、先行パージングの進度が主パージングの進度以上であり、且つ、先行パージング、主パージングの進度の差が所定範囲内となるように、先行パージング部11、主パージング部12のそれぞれに配分すべきCPU資源(13、14)の量を決定する。
ここで、CPU資源の量とは、複数CPU構成のコンピュータシステムにおける、各物理CPUの台数であってもよいし、オペレーティングシステムや仮想化ソフトウェアが提供する仮想CPUの台数であってもよい。あるいは、物理CPUまたは仮想CPUに対するCPU時間割当量や処理優先度であってもよい。
CPU資源量の割り当てにおいて、CPU配分決定部151は、事前に各パージングの進度の差について、上限値、および下限値を設定しておく。
CPU配分決定部151は、先行パージングが主パージングよりも下限値以上先行していなければ、主パージング部12に割り当てられていたCPU資源の一部を先行パージング部11に割り当てる決定を下す。CPU配分決定部151は、先行パージングが主パージングよりも上限値以上先行していれば、先行パージング部11に割り当てられていたCPU資源の一部を主パージング部12に割り当てる決定を下す。
CPU配分制御部152は、CPU配分決定部151で決定された配分量に基づいて、各論理CPUを、各パージング部(11、12)に配分する。
また、CPU配分制御部152は、主パージング部12により、並列処理のために論理CPUの追加を要求された時、主パージング実行論理CPU群14に、論理CPUを追加する。
主パージング部12が、追加された論理CPUを使用して、要素の構文解析を終了したとき、CPU配分制御部152は、割り当てた論理CPUを解放する。
出力部16は、XMLツリー161を、レンダリングエンジンなどに出力する。
図6を参照して、XMLテキスト101から、XMLツリー161への変換手順について詳細に説明する。図6(a)は、XMLテキスト101の一部である。図6(b)は、図6(a)のテキストに対応するXMLツリー161の一部である。同図(a)に示すように、XMLテキスト101は、ある「要素」における「要素の内容」の中に、文字データや、別の「要素」が格納されており、「要素」が入れ子構造になっている。
内部表現生成部124は、この部分で最初に出現した「開始タグ」の属性名を示すノードを作成する。
例えば、図6(a)において、最初に出現する開始タグが「<CC p=”fоо”>」であれば、図6(b)に示すように、このタグの属性名を示すノード「CC」が作成される。「p=”fоо”」の属性は、このノード「CC」内のデータフィールドの1つに格納される。
内部表現生成部124は、開始タグに対応するノードを親ノードとして、開始タグ以降の「要素の内容」を示すノードを、その親ノードの子ノードとして生成する。
例えば、図6(a)において、開始タグ「<CC p=”fоо”>」以降の「要素の内容」が、「text fоr CC」の文字データと、要素「DD」と、「text2 fоr CC」の文字データである。この場合、図6(b)に示すように、まず、親ノードとしてノード「CC」が作成され、その子ノードとして、各文字データに対応するノードと、ノード「DD」とが作成される。
図7を参照して、本実施形態の構文解析装置1の動作について説明する。同図は、構文解析装置1の動作の一例を示すシーケンス図である。同図を参照すると、先行パージング部11は先行パージングを開始し(ステップT10)、先行パージング進捗情報114を作成する(ステップT11)。
先行パージングと並行して、主パージング部12は主パージングを開始し(ステップT20)、主パージング進捗情報125を作成する(ステップT21)。主パージングにおいては、図7で後述する要素構文解析処理が実行される。
進度調整部15は、先行パージング進捗情報114および主パージング進捗情報125を取得し、それらの情報の示す各パージングの進度の差が、所定の範囲内であるか否かを判断する(ステップT30)。
進度の差が範囲内でなければ(ステップT30:NO)、CPU配分決定部151は、差が範囲内となるように、各パージング部へのCPU資源量の割り当てを決定する(ステップT31)。CPU配分制御部152は、CPU配分決定部151で決定された配分量に基づいて、各論理CPUを、各パージング部に配分する(ステップT32)。
図8〜図10を参照して、主パージング部12の動作について説明する。図8は、主パージング部12の実行する要素構文解析処理を示すフローチャートである。この要素構文解析処理は、XMLテキスト101が入力されたときから、XMLテキスト101の全ての構文解析が終了するまでの間、要素ごとに繰り返し実行される。
図8を参照すると、親論理CPUが実行する構文解析部121は、XMLテキスト101のうち、解析されていない部分の先頭の文字を解析し、その文字に続く文字列が開始タグであるか否かを判断する(ステップU1)。
開始タグであれば(ステップU1:YES)、構文解析部121は、その開始タグの構文解析を行う(ステップU2)。
構文解析部121は、粒度推定部122を呼び出して、ステップU2で解析した開始タグの位置を引数として与える。粒度推定部122は、後述する粒度推定処理を実行し、粒度を返す。先行解析表1131に、ステップU2で解析した開始タグの位置が登録されていなければ、粒度推定部122は、粒度が不明である旨を返す(ステップU3)。
構文解析部121は、粒度が不明でなく、且つ、粒度が所定の閾値以上であるか否かを判断する(ステップU4)。
粒度が不明でなく、所定の閾値以上であれば(ステップU4:YES)、構文解析部121は、並列化部123を呼び出す。並列化部123は、主パージング実行論理CPU群14に、未使用の論理CPU(子論理CPU)を追加する。追加された子論理CPUは、粒度が閾値以上の要素における「要素の内容」の構文解析を開始する(ステップU5)。
粒度が不明、または所定の閾値に達していなければ(ステップU4:NO)、構文解析部121は、「要素の内容」を構文解析する(ステップU6)。
ステップT5またはT6の後、構文解析部121は、「終了タグ」を構文解析し、内部表現生成部124を呼び出す。内部表現生成部124は、構文解析の結果に基づいて、XMLツリー161を生成する(ステップU7)。
先頭の文字が開始タグでなければ(ステップU1:NO)、構文解析部121は、例外処理を行う(ステップU8)。ステップU7、またはU8の後、主パージング部12は、要素構文解析処理を終了する。
図9は、粒度推定処理を示すフローチャートである。粒度推定部122は、まず、先行解析表1131を参照し、引数に一致する開始タグの位置を検索する(ステップU31)。粒度推定部122は、開始タグの位置が登録されているか否かを判断する(ステップU32)。
開始タグの位置が登録されていれば(ステップU32:YES)、粒度推定部122は、開始タグの位置と、対応する終了タグの位置との差である粒度を算出して返す(ステップU33)。開始タグの位置が登録されていなければ(ステップU32:NO)、粒度推定部122は、粒度が不明である旨を返す(ステップU34)。ステップU33、またはU34の後、粒度推定部122は、粒度推定処理を終了する。
図10は、例外処理を示すフローチャートである。同図を参照すると、構文解析部121は、要素が空き要素タグであるか否かを判断する(ステップU81)。空き要素タグであれば(ステップU81:YES)、構文解析部121は、空き要素タグを構文解析する(ステップU82)。空き要素タグでなければ(ステップU81:NO)、構文解析部121は、構文エラーを出力する(ステップU83)。
図11は、主パージング部12の動作結果の一例を示すシーケンス図である。論理CPU141が構文解析部121を呼び出して、要素構文解析処理のステップU3までを実行する。
構文解析部121は、ステップU4において、粒度が所定の閾値以上であれば(ステップU4:YES)、論理CPU142を追加する(ステップU5)。
論理CPU141が実行する構文解析部121は、「終了タグ」を構文解析する(ステップU6)。このステップT6と並行して、論理CPU142が構文解析部121を呼び出し、割り当てられた要素のうち、解析した文字列が開始タグであるか否かを判断する(ステップUU1)。
続いて、図12〜図22を参照して、構文解析装置1aの動作結果の一例について説明する。
図12(a)は、XMLテキスト101におけるパージングの進度を示す図である。同図(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。同図(c)は、同図(a)の時点における先行解析表1131を示す図である。同図(d)は、同図(a)の時点におけるXMLツリー161を示す図である。
図12(a)を参照すると、先行パージング部11は、先頭文字を0文字目として、20文字目の位置(1011)まで解析を進めている。一方、主パージング部12は、5文字目の位置(1012)まで解析を進めている。
図12(b)に示すように、この時点では、タグ一時記憶部112に、「AA」、「BB」の開始タグの位置情報が格納されている。
図12(c)に示すように、この時点では、終了タグが出現していないので、先行解析表1131には、開始タグ、終了タグの各位置は1つも記載されていない。
構文解析部121は、開始タグ「<BB>」が出現したとき、その位置「5」を引数として粒度推定部122を呼び出す。しかし、図13(c)に示したように先行解析表1131は空であるから、粒度推定部122は、サイズが不明である旨を返す。そこで、構文解析部121は、開始タグ「<BB>」以降の部分を並列化せず、そのまま逐次的に構文解析を継続する。
図12(d)に示すように、この時点では、主パージング部12は、開始タグ「<AA>」の解析結果に基づいて、ノード「AA」を作成している。
図13(a)は、図12(a)以降のパージングの進度を示す図である。図13(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。図13(c)は、同図(a)の時点における先行解析表1131を示す図である。図13(d)は、同図(a)の時点におけるXMLツリー161を示す図である。
図13(a)を参照すると、先行パージング部11は、108文字目の位置(1013)まで解析を進めており、一方、主パージング部12は、28文字目の位置(1014)まで解析を進めている。
図13(b)に示すように、この時点では、図13(a)の時点以降、タグ一時記憶部112に「<DD>」、「<CC p=”fоо”>」の位置情報が更に格納され、「<BB>」、「<DD>」、「<CC p=”fоо”>」の位置情報が、この順に取り出されている。
図13(c)に示すように、この時点では、取り出された「<BB>」、「<DD>」、「<CC p=”fоо”>」の開始タグの位置と、これらに対応する終了タグの位置とが先行解析表1131に追加されている。
構文解析部121は、要素「AA」の内容として開始タグ「<BB>」、および「text fоr BB」を構文解析する。このため、図13(d)に示すように、ノード「AA」の子ノードとして、ノード「BB」(1611)が追加され、ノード「BB」の子ノードとしてノード「text fоr BB」(1612)が追加される。
続いて、「<CC p=”fоо”>」の開始タグが出現したとき、構文解析部121は、粒度推定部122に、その開始タグの位置「28」を引数として与える。粒度推定部122は、その引数と一致する開始タグの位置と、これに対応する終了タグの位置「94」との差「66」を粒度として返す。粒度が事前に定めた閾値(例えば、「50」)を超えるので、構文解析部121は、「<CC p=”fоо”>」直後から「</CC>」直前までの部分を並列処理すべき部分と判断する。図13(a)において一点鎖線で囲まれた部分は、この並列処理の対象となる部分(1015)である。
並列化部123は、進度調整部15を呼び出して、論理CPUを追加させる。追加された論理CPU(子論理CPU)は、構文解析部121を呼び出し、図13(a)において一点鎖線で囲まれた部分を構文解析する。
一方、構文解析部121をこれまで実行していた論理CPU(親論理CPU)は、「</CC>」の直後から、構文解析を続行する。
ここで、子論理CPUが構文解析する部分(1015)は、XML文法において「要素」(「<AA>」〜「</AA>」)を構成する「要素の内容」に相当する。このため、図13(d)に示すように、子論理CPUが作成するXMLツリー(1611)は、親論理CPUが作成するノード「CC」の子ノードとなるように、構文解析部121は、内部表現生成部124に対し、ツリーノードの親ノードの情報を渡す。
例えば、ノードに対応する構造体とノード間のエッジに対応する構造体間リンクポインタによってツリーデータを形成する実装方法を用いる。この方法では、子論理CPUが作成するXMLツリーのルートノードにある「親ノードへのリンクポインタ」欄に、親論理CPUが作成するノードCCへのポインタ値が設定され、親論理CPUが作成するノードCCにある「子ノードへのリンクポインタのリスト」の末尾に、子論理CPUが作成するXMLツリーのルートノードへのポインタ値が追加される。このようにして、ノード間の親子関係が実現される。
図14(a)は、図13(a)以降のパージングの進度を示す図である。同図(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。同図(c)は、同図(a)の時点における先行解析表1131を示す図である。同図(d)は、同図(a)の時点におけるXMLツリー161を示す図である。
図14(a)を参照すると、先行パージング部11は、153文字目の位置(1016)まで字句解析を進めている。親論理CPUが、93文字目の位置(1017)まで構文解析を進める一方、子論理CPUが、40文字目の位置(1018)まで構文解析を進めている。
図14(b)に示すように、この時点では、図13(a)の時点以降、タグ一時記憶部112に「<EE p=”bar”>」の開始タグの位置情報が追加され、「<FF>」の開始タグの位置情報が取り出されている。
図14(c)に示すように、この時点では、取り出された「<FF>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に追加されている。同図(c)における斜線部分は、追記された部分である。
図14(d)に示すように、この時点で、親論理CPUが実行する構文解析部121は、開始タグ「<CC p=”fоо”>」の解析を終了している。このため、XMLツリー161において、ノード「CC」(1613)が追加される。
図15(a)は、図14(a)以降のパージングの進度を示す図である。図15(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。図15(c)は、同図(a)の時点における先行解析表1131を示す図である。図16は、図15(a)の時点におけるXMLツリー161を示す図である。
図15(a)を参照すると、先行パージング部11は、170文字目の位置(1019)まで字句解析を進めている。親論理CPUが、108文字目の位置(1020)まで構文解析を進める一方、子論理CPUが、88文字目の位置(1021)まで構文解析を進めている。
図15(b)に示すように、この時点では、図14(a)の時点以降、タグ一時記憶部112から「<EE p=”bar”>」の開始タグの位置情報が取り出され、「<GG>」の開始タグの位置情報が追加されている。
図15(c)に示すように、この時点では、取り出された「<EE p=”bar”>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に追加されている。同図(c)における斜線部分は、追記された部分である。
この時点で、親論理CPUが実行する構文解析部121は、要素「AA」の内容として、「text fоr AA1」を解析している。このため、図16に示すように、ノード「AA」の子ノードとして、ノード「text fоr AA1」(1614)が追加される。
子論理CPUが実行する構文解析部121は、並行して、要素「CC」の内容を構文解析し、開始タグ「<DD>」に遭遇する。この開始タグの位置と、対応する終了タグの位置とは、先行解析表1131において、それぞれ、「53」、「75」であるから、粒度は「22」である。粒度が閾値以下なので、構文解析部121は、並列処理はしないで「</CC>」直前まで解析を進める。
この結果、図16に示すように、ノード「CC」のサブツリー(1615)が形成される。構文解析部121は、要素「CC」の内容の解析が終了したとき、進度調整部15を呼び出して、子論理CPUを解放する。
図17(a)は、図15(a)以降のパージングの進度を示す図である。図17(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。図17(c)は、同図(a)の時点における先行解析表1131を示す図である。図18は、図17(a)の時点におけるXMLツリー161を示す図である。
図17(a)を参照すると、先行パージング部11は、194文字目の位置(1022)まで字句解析を進めている。一方、主パージング部12は、160文字目の位置(1023)まで構文解析を進めている。
図17(b)に示すように、この時点では、図15(a)の時点以降、タグ一時記憶部112に「<HH>」の位置情報が格納され、その「<HH>」の位置情報が取り出されている。
図17(c)に示すように、この時点では、取り出された「<HH>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に追加されている。同図(c)における斜線部分は、追記された部分である。
構文解析部121は、「</CC>」の直後から、構文解析を進め、開始タグ「<EE p=”bar”>」に遭遇する。この開始タグの位置と、対応する終了タグの位置とは、先行解析表1131において、それぞれ、「108」、「160」であるから、粒度は「52」である。粒度が閾値(50)を超えているので、構文解析部121は、この開始タグ以降の要素を並列処理する。図18(a)において一点鎖線で囲まれた部分は、この並列処理の対象となる部分である。
並列化部123は、進度調整部15を呼び出して、子論理CPUを追加させる。子論理CPUは構文解析部121を呼び出し、図18(a)において一点鎖線で囲まれた部分の先頭から、構文解析を行う。
一方、これまで構文解析部121を実行してきたCPU(親論理CPU)は、開始タグ「<EE p=”bar”>」を解析後、「</EE>」の直後から、構文解析を続行する。この結果、図18に示すように、ノード「AA」の子ノード「EE」(1616)が作成される。同図において、一点鎖線で囲まれた部分が、子論理CPUが解析する対象の部分である。
図19(a)は、図17(a)以降のパージングの進度を示す図である。図19(b)は、同図(a)の時点におけるタグ一時記憶部112を示す図である。図19(c)は、同図(a)の時点における先行解析表1131を示す図である。図20は、図19(a)の時点におけるXMLツリー161を示す図である。
図19(a)を参照すると、先行パージング部11は、XMLテキスト101の最後の文字の位置(1025)まで字句解析を進めて、先行パージングを終了している。親論理CPUは、178文字目の位置(1026)まで構文解析を進める一方、子論理CPUは、154文字目の位置(1027)まで構文解析を進めている。
図19(b)に示すように、この時点では、図17(a)の時点以降、タグ一時記憶部112から「<GG>」、「<AA>」の位置情報が、この順に取り出されている。
図19(c)に示すように、この時点では、取り出された「<GG>」、「<AA>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に追加されている。同図(c)における斜線部分は、追記された部分である。この結果、先行解析表1131には、全ての解析結果が記載されたこととなる。
構文解析部121は、親論理CPUを使用して、要素「GG」の内容として「text fоr GG1」を解析する。この結果、図20に示すように、ノード「GG」を含むサブツリー(1617)が形成される。
親論理CPUが実行する構文解析部121は、「<HH>」の開始タグを見つける。この開始タグの位置と、対応する終了タグの位置とは、先行解析表1131において、それぞれ、「178」、「188」であるから、粒度は「10」である。粒度が閾値以下なので、構文解析部121は、子論理CPUを追加しないで、この開始タグ以降の構文解析を進める。
また、子論理CPUが実行する構文解析部121は、要素「EE」の内容を構文解析する。この結果、図20に示すように、ノード「EE」を含むサブツリー(1618)が形成される。要素「EE」の構文解析後、子論理CPUは解放される。
図21は、図19(a)以降のパージングの進度を示す図である。図22は、図21の時点におけるXMLツリー161を示す図である。
図21を参照すると、主パージング部12は、XMLテキスト101の最後の文字の位置(1028)まで解析を進めて、主パージングを終了している。この結果、図22に示すように、解析された部分に対応するサブツリー(1619)が形成される。
なお、本実施形態では、進度調整部15は、論理CPUを割り当てているが、論理CPUの代わりに、コンピュータシステムが有する複数CPUを構成する場合における各物理CPUを割り当ててもよいし、タスクやスレッドを割り当ててもよい。
本実施形態では、主パージング部12は、粒度が閾値以上であれば、再帰回数に関わりなく並列処理を行う構成としているが、粒度が閾値以上であっても、再帰回数が所定の上限値以上であれば、並列処理を行わない構成とすることもできる。この構成によれば、再帰回数が多くなることを防ぐことができる。
また、主パージング部12は、粒度が閾値以上であっても、未使用のリソース量が所定の下限値以下であれば、並列処理を行わない構成とすることもできる。この構成によれば、並列化によるリソースの不足を防止できる。
本実施形態では、先行パージング、主パージングのそれぞれの進捗を監視し、リソースの配分を決定する進度調整部15を設けて、各パージングの進度を調整する構成としている。しかし、構文解析装置1は、進度調整部15を設けない構成とすることもできる。この場合、構文解析装置1を仮想的に内部に構成する装置におけるオペレーティングシステムや仮想化ソフトウェアが提供する仮想CPUの割り当て機能に、各パージングの進度の調整を行わせる構成とする。
構文解析装置1において、進度調整部15を用いない実装は、XMLパージング処理全体の複雑さを軽減し、実装規模を小さくできるメリットがある。他方、本実施形態のように進度調整部15を導入することで、コンピュータシステム内の限られたCPU資源を両パージング処理で効率的に利用し、全体的なXMLパージング処理性能を向上させることが期待できる。すなわち、構文解析装置1内に進度調整部15を導入するか否かは、実装の複雑さと処理性能のトレードオフの上で判断されるべきものである。
本実施形態では、先行パージング部11が本発明のタグ位置取得手段に相当し、主パージング部12が本発明の並列解析手段に相当する。先行パージング実行論理CPU13および主パージング実行論理CPU群14が本発明のリソースに相当する。
以上説明したように、本実施形態によれば、構文解析装置は、テキストを字句解析してタグの位置を取得し、並行して、タグで区切られたそれぞれの部分を並列に構文解析し、字句解析と構文解析とに割り当てるリソース量を調整する。構文解析装置は、タグ位置に基づいて並列解析するので、文法に関わらずに並列解析でき、スループットが向上する。また、構文解析装置は、字句解析、構文解析を並行して行い、字句解析において各部分の解析結果を突き合わせる必要がないので、レイテンシが小さくなる。
また、構文解析装置は、パージングを複数のCPUで分担して行うことができるため、同じ要求性能であれば、シングルCPUの方式よりも低い動作周波数(クロック)のCPUでパージングを実行することができる。このため、動作時および待機時のCPUの消費電力を低減し、システム全体を省電力化できる。
(第2の実施形態)
本発明の第2の実施形態について、図23〜図30を参照して説明する。本実施形態は、並列処理により、先行パージングを高速に行う点で第1の実施形態と異なる。図23は、本実施形態の構文解析装置1aの一構成例を示すブロック図である。構文解析装置1aは、先行パージング部11、先行パージング実行論理CPU13の代わりに先行パージング部11a、先行パージング実行論理CPU群13aを設ける点以外は、第1の実施形態の構文解析装置1の構成と同様である。
先行パージング実行論理CPU群13aは、字句解析を行う複数の論理CPUを有する。図24は、本実施形態の先行パージング部11aの一構成例を示すブロック図である。先行パージング部11aの構成は、字句解析部111の代わりに、主字句解析部1111、および副字句解析部1112を設け、タグ一時記憶部112の代わりに、主タグ一時記憶部1121、および副タグ一時記憶部1122を設ける点で、第2の実施形態の先行パージング部11と異なる。
進度調整部15は、それぞれ、先行パージング実行論理CPU群13aに含まれる複数の論理CPUを主字句解析部1111および副字句解析部1112のそれぞれに割り当てる。進度調整部15は、主字句解析部1111、副字句解析部1112が、XMLテキスト101の最後の文字まで字句解析を終了した場合は、それぞれに割り当てた論理CPUを解放する。
主字句解析部1111は、XMLテキスト101の先頭から、字句解析を開始し、副字句解析部1112は、XMLテキスト101の中間の位置から、字句解析を開始する。主字句解析部1111は、主タグ一時記憶部1121に、開始タグの位置情報を一時保存し、副字句解析部1112は、副タグ一時記憶部1122に、開始タグの位置情報を一時保存する。
主タグ一時記憶部1121、副タグ一時記憶部1122は、タグ一時記憶部112と同様に後入れ先出し方式で位置情報を記憶する。
主タグ一時記憶部1121の動作は、開始タグが出現したときの動作以外は、図3に示した、第1の実施形態の状態遷移図と同様である。
主字句解析部1111は、開始タグを見つけるたびに、すなわち、状態S2において「x」を字句解析するたびに、先行解析表1131を参照し、その開始タグの位置が記録されているか否かを調べる。記録されていれば、主字句解析部1111は、その開始タグに対応する終了タグの位置まで、XMLテキスト101を読み飛ばし、その終了タグの直後から字句解析を続行する。
副字句解析部1112の動作は、以下の2点以外は、図3に示した、第1の実施形態の状態遷移図と同様である。
1つ目の違いは、字句解析の開始時の動作の違いである。副字句解析部1112は、字句解析の開始時に、「>」を見つけるまでXMLテキスト101を読み飛ばし、次に、「s」が1つ以上続いていれば、それらを読み飛ばす。そして、副字句解析部1112は、最後に見つけた「<」の位置から字句解析を開始する。この動作により、図3における「S1」相当の地点から、XMLテキスト101の解析を開始できる。
2つ目の違いは、終了タグを見つけたときの動作の違いである。終了タグを見つけたとき、すなわち、状態S3またはS5において、「<」を字句解析したとき、副字句解析部1112は、開始タグの位置情報が1以上記憶されているか否かを、自らに付属している副タグ一時記憶部1122に問い合わせる。
副タグ一時記憶部1122に位置情報が全く記載されていない場合、副字句解析部1112は、見つけた終了タグを単に読み飛ばし、タグ対応登録部113にタグの位置の組を登録しない。この場合、副字句解析部1112は、その終了タグの直後から字句解析を再開する。
副タグ一時記憶部1122に位置情報が記載されている場合、副字句解析部1112は、その位置情報を取り出し、開始タグ、終了タグの位置の組をタグ対応登録部113に登録する。
図25(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における主タグ一時記憶部1121を示す図である。同図(c)は、同図(a)の時点における副タグ一時記憶部1122を示す図である。同図(d)は、同図(a)の時点における先行解析表1131を示す図である。
図25(a)に示すように、主字句解析部1111は、XMLテキスト101の先頭の文字(1050)から字句解析を開始する。副字句解析部1112は、先頭文字を0文字目として、XMLテキスト101のほぼ中央にあたる112文字目(1051)から、処理を開始する。副字句解析部1112は、上述の読み飛ばし処理を行い、132文字目(1052)から字句解析を開始する。
この読み飛ばしにより、副字句解析部1112内の有限状態機械は、XMLテキストの途中から読み込み始めたにも関わらず、第1の実施形態と同様の字句解析(S1〜S8)を行うことができる。
図25(b)、図25(c)に示すように、この時点では、主タグ一時記憶部1121、副タグ一時記憶部1122には、位置情報が1つも格納されていない。
図25(d)に示すように、この時点では、位置情報が取り出されていないので、先行解析表1131には、開始タグ、終了タグの位置は1つも格納されていない。
図26(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における主タグ一時記憶部1121を示す図である。同図(c)は、同図(a)の時点における副タグ一時記憶部1122を示す図である。同図(d)は、同図(a)の時点における先行解析表1131を示す図である。
図26(a)を参照すると、主字句解析部1111は、41文字目(1053)まで字句解析を進めている。一方、副字句解析部1112は、153文字目(1054)まで字句解析を進めている。
主字句解析部1111は、開始タグ「<AA>」、「<BB>」、「<CC p=”fоо”>」が見つけているが、これらの位置情報は、先行解析表1131に記載がないので、字句解析部1111は字句解析を続行する。
図26(b)に示すように、この時点では、主字句記憶部1121には、「<AA>」、「<BB>」、「<CC p=”fоо”>」の位置情報が格納され、「<BB>」の位置情報が取り出されている。
図26(c)に示すように、この時点では、副字句記憶部1122には、「<FF>」の位置情報が格納され、その「<FF>」の位置情報が取り出されている。
図26(d)に示すように、この時点では、取り出された「<BB>」、「<FF>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に記載されている。
図27(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における副タグ一時記憶部1122を示す図である。
図27(a)を参照すると、図26(a)の時点以降、主字句解析部1111は、46文字目(1055)まで字句解析を進めている。
一方、副字句解析部1112は、終了タグ「</EE>」を見つけているが、この時点で、図27(b)に示すように、副タグ一時記憶部1122には、開始タグの位置情報が存在しない。これは、副字句解析部1112が、「<EE>」より進んだ位置から解析を開始したためである。副字句解析部1112は、その終了タグを飛ばし、その直後(1056)から字句解析を続行する。
図28(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における主タグ一時記憶部1121を示す図である。同図(c)は、同図(a)の時点における副タグ一時記憶部1122を示す図である。同図(d)は、同図(a)の時点における先行解析表1131を示す図である。
図28(a)を参照すると、図27(a)の時点以降、主字句解析部1111は、108文字目(1057)まで字句解析を進めている。一方、副字句解析部1112は、XMLテキストの最後の文字(1058)まで字句解析を進めている。この時点で、副字句解析部1112に割り当てられた論理CPUは、解放される。
図28(b)に示すように、この時点では、主字句記憶部1121には、「<DD>」の位置情報が格納され、「<DD>」、「<CC p=”fоо”>」の位置情報が、この順に取り出されている。
図28(c)に示すように、この時点では、図27(a)の時点以降、副字句記憶部1122には、「<GG>」、「<HH>」の位置情報が格納され、「<HH>」、「<GG>」の位置情報が、この順に取り出されている。
図28(d)に示すように、この時点では、図27(a)の時点以降、取り出された「<DD>」、「<CC p=”fоо”>」、 「<HH>」、および「<GG>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に追加されている。同図(d)における斜線部分は、追記された部分である。
図29(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における主タグ一時記憶部1121を示す図である。同図(c)は、同図(a)の時点における先行解析表1131を示す図である。
図29(a)を参照すると、主字句解析部1111は、図28(a)の時点以降、132文字目(1059)まで字句解析を進め、開始タグ「<FF>」を見つける。この開始タグの位置「132」は、図29(c)に示すように、先行解析表1131に記載されている。このため、主字句解析部1111は、この開始タグと対応する終了タグ「</FF>」の位置(1060)、すなわち153文字目までテキストを読み飛ばし、その直後から字句解析を再開する。
図30(a)は、先行パージングの進度を示す図である。同図(b)は、同図(a)の時点における主タグ一時記憶部1121を示す図である。同図(c)は、同図(a)の時点における先行解析表1131を示す図である。
図30(a)を参照すると、図29(a)の時点以降、主字句解析部1111は、160文字目(1061)まで字句解析を進め、その直後(1062)に、開始タグ「<GG>」を見つける。この開始タグの位置「160」は、図30(c)に示す先行解析表1131に記載済みなので、主字句解析部1111は、この開始タグと対応する終了タグ「</GG>」の位置(1063)、すなわち206文字目までテキストを読み飛ばし、その直後から字句解析を再開する。
図30(b)に示すように、この時点では、図29(a)の時点以降、主字句記憶部1121から、「<EE>」の位置情報が取り出されている。
図30(c)に示すように、この時点では、図29(a)の時点以降、取り出された「<EE>」の開始タグの位置と、対応する終了タグの位置とが先行解析表1131に記載されている。図30(c)における斜線部分は、追記された部分である。
以降は、主字句解析部1111は、字句解析を最後の文字まで進め、「<AA>」の位置と、対応する終了タグの位置とを先行解析表1131に記載して、先行パージングが完了する。
なお、本実施形態では、副字句解析部1112を1つだけ設ける構成としているが、副字句解析部を複数設ける構成としてもよい。この場合、先行パージング実行論理CPU群13b内の論理CPUの総数をn個、各論理CPUに割り当てられた番号をmとする。ここで、mは、1、2、・・・nー1の自然数である。各副字句解析部は、XMLテキスト101を、m対n−mに内分する位置から、処理を開始する。
例えば、副字句解析部を1つだけ設ける場合、n=2、m=1であるから、副字句解析部は、XMLテキスト101のちょうど中間地点から処理を開始する。m対n−mの内分が整数にならない場合は、適宜整数に丸める。
本実施形態では、主字句解析部1111が本発明の主字句解析手段に相当し、副字句解析部1112が本発明の副字句解析手段に相当する。主タグ一時記憶部1121が主タグ一時記憶部1121に相当し、副タグ一時記憶部1122が副タグ一時記憶部1122に相当する。タグ対応登録部113が本発明の記憶手段に相当する。
以上説明したように、本実施形態によれば、主字句解析手段、副字句解析手段が並列に字句解析するので、XMLテキスト101のテキストの行の長さや、タグごとの行数に左右されずに、先行パージングにおいて並列処理を行うことができる。このため、XMLパージング全体の処理性能が一層向上する。
主字句解析手段は、開始タグを見つけたとき、その開始タグの位置が、記憶手段に記録されていれば、対応する終了タグの位置までスキップする。このため、副字句解析手段が既に解析した部分を字句解析しなくて済み、主字句解析手段は、字句解析を効率的に行うことができる。
また、副字句解析手段は、XMLテキスト101を内分した位置から、タグの末尾文字「>」が出現するまで、テキストをスキップし、最後に見つけたタグの先頭文字「<」の位置から字句解析を開始する。このため、副字句解析手段は、テキストの途中から字句解析する場合であっても、図3における初期状態「S1」から、正しい字句解析処理を開始することができる。
さらに、副字句解析手段は、終了タグを見つけたときに、副タグ一時記憶部に開始タグの位置情報が1つも格納されていなければ、その終了タグをスキップする。このため、要素の途中から字句解析を開始し、対応する開始タグのない終了タグが出現した場合でも、副字句解析手段は、不要な字句解析を行う必要がなくなり、効率的に字句解析できる。
(第3の実施形態)
本発明の第3の実施形態について、図31を参照して説明する。本実施形態は、XMLパーザプログラムに本発明を適用した点で第1の実施形態と異なる。
図31は、本実施形態の構文解析装置1bの一構成例を示すブロック図である。同図を参照すると、構文解析装置1bの構成は、先行パージング部11、主パージング部12c、進度調整部15の代わりにXMLパーザプログラム20を設け、コンピュータシステム21を更に設けた以外は、第1の実施形態の構文解析装置1と同様の構成である。
XMLパーザプログラム20は、コンピュータシステム21上で動作するコンピュータプログラムであり、先行パージング手続き11b、主パージング手続き12b、および速度調整手続き15bを有する。
先行パージング手続き11b、主パージング手続き12b、および速度調整手続き15bは、コンピュータシステム21上で、それぞれ、先行パージング部11、主パージング部12、および速度調整部15の動作を実現する手続きである。
コンピュータシステム21は、オペレーティングシステム211、マルチコアCPU212、およびメモリ213を有する。
マルチコアCPU212は、複数のCPUコアを内蔵する処理装置である。メモリ213は、主記憶装置として使用される。オペレーティングシステム211は、マルチコアCPU212およびメモリ213を使用して動作し、コンピュータシステム21全体を制御する。
XMLツリー161は、ツリー構造の形で、メモリ213上に生成され、その後、コンピュータシステム21上の別の処理プログラムによって利用される。別の処理プログラムは、例えば、在庫管理プログラムや人事管理プログラムである。
以上説明したように本実施形態によれば、XMLパーザプログラム20はマルチコアCPU212を活かした高速なXML処理を行える。このため、XML形式テキストの入力に関わるオーバヘッドを低減し、もってシステム全体の処理性能向上に寄与することができる。
(第4の実施形態)
本発明の第4の実施形態について、図32を参照して説明する。本実施形態は、Webブラウザに本発明を適用した点で第4の実施形態と異なる。
図32は、本実施形態の構文解析装置1cの一構成例を示すブロック図である。同図を参照すると、構文解析装置1dの構成は、XMLテキスト101の代わりにHTMLテキスト101cが入力され、XMLパーザプログラム20の代わりに、HTMLパーザ部20cを設け、出力部16の代わりにHTMLレンダラ部16c、グラフィックサブシステム22、ディスプレイ装置23を設けた以外は、第4の実施形態の構文解析装置1cと同様の構成である。
HTMLテキスト101dは、HTML形式のテキストファイルである。
HTMLパーザ部20c、およびHTMLレンダラ部16dは、ウェブブラウザプログラムに格納される。
HTMLパーザ部20cは、先行パージング手続き11c、主パージング手続き12c、および速度調整手続き15cを有する。先行パージング手続き11d、主パージング手続き12c、および速度調整手続き15cは、コンピュータシステム21上で、それぞれ、XMLテキスト101の代わりにHTMLテキスト101cを処理し、先行パージング部11、主パージング部12、および速度調整部15の動作を実現する手続きである。
HTMLレンダラ部16cは、HTMLツリー161cを解釈して、HTMLテキストに記述された内容をレンダリング(描画)してグラフィックサブシステム22を介してディスプレイ装置23に出力する。
ディスプレイ装置23は、LCD(Liquid Crystal Display)やCRT(Cathode Rey Tube)などの表示装置である。
以上説明したように、本実施形態によれば、HTMLパーザ部20cはマルチコアCPU212を活かした高速なHTML処理を行えるため、HTMLテキスト解析に要する時間を低減し、描画性能に優れたウェブブラウザを実現できる。
本発明は、XML形式で互いにデータ交換するコンピュータシステム間で、相手から受信したXMLメッセージをコンピュータ内に取り込むXMLパーザに用いることができる。本発明はまた、ワールド・ワイド・ウェブ・コンソーシアム(W3C)が勧告したSOAP(Simple Object Access Protocol:ソープ)プロトコルを用いたウェブサービス(Webサービス)において、SOAPメッセージを解釈する用途に適用することもできる。
本発明はまた、XML形式をファイル形式としてもちいるコンピュータ文書(ワードプロセッサ文書、スプレッドシートや電子プレゼンテーション文書等)において、そのXML形式の文書ファイルをコンピュータ内に読み込む処理に適用することができる。
本発明はまた、HTML形式の文書を画面表示するHTMLブラウザ(ウェブブラウザ)におけるHTMLデータ読み込み部分に適用することもできる。
1、1a、1b、1c 構文解析装置
10 入力部
11、11b 先行パージング部
11b、11c 先行パージング手続き
12 主パージング部
12b、12c 主パージング手続き
13 先行パージング実行論理CPU
13b 先行パージング実行論理CPU群
14 主パージング実行論理CPU群
15 進度調整部
15c、15d 進度調整手続き
16 出力部
20 XMLパーザプログラム
20d HTMLパーザ部
21 コンピュータシステム
22 グラフィックサブシステム
23 ディスプレイ装置
101 XMLテキスト
101d HTMLテキスト
102 入力一時記憶部
111 字句解析部
112 タグ一時記憶部
113 タグ対応登録部
114 先行パージング進捗情報
121 構文解析部
122 粒度推定部
123 並列化部
124 内部表現生成部
125 主パージング進捗情報
141、142 論理CPU
151 CPU配分決定部
152 CPU配分制御部
161 XMLツリー
161d HTMLツリー
211 オペレーティングシステム
212 マルチコアCPU
213 メモリ
1111 主字句解析部
1112 副字句解析部
1121 主タグ一時記憶部
1122 副タグ一時記憶部
1131 先行解析表
S1〜S8 状態
T10〜T32、U1〜U7、U81〜U83、UU6 ステップ

Claims (13)

  1. 割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおける、開始タグの位置と、該開始タグに対応する終了タグの位置とを取得し、取得した前記開始タグの位置と、前記終了タグの位置とを対応付けてタグ位置記憶手段に格納するタグ位置取得手段と、
    前記テキストを、前記タグ位置記憶手段に記憶された前記開始タグの位置まで構文解析したとき、該開始タグと対応する前記終了タグの位置を該タグ位置記憶手段から読み出し、該開始タグと、該開始タグに対応する終了タグと間の文字数を算出し、該文字数が閾値以上であれば、該開始タグと該終了タグとの間の部分と、該終了タグ以降の部分とを異なるリソースで並列に構文解析する並列解析手段と、
    前記タグ位置取得手段による前記字句解析の処理速度をできるだけ速くし、前記テキストにおける、該字句解析が終わり、前記構文解析手段による前記構文解析が終わっていない部分の文字数を所定の範囲内にするように、前記タグ位置取得手段に割り当てるリソース量と前記並列解析手段に割り当てるリソース量とを調整する調整手段と、
    を有する構文解析装置。
  2. 前記タグ位置取得手段は、
    前記テキストの先頭から順に字句解析して、前記開始タグの位置と、前記終了タグの位置とを取得する主字句解析手段と、
    前記主字句解析手段による字句解析と並行して、前記テキストの途中の所定の位置から順に字句解析して、前記開始タグの位置と、前記終了タグの位置とを取得する副字句解析手段と、
    を有する、請求項に記載の構文解析装置。
  3. 前記主字句解析手段は、
    開始タグの位置を一時記憶する主タグ一時記憶手段と、
    前記テキストのうち、解析されていない部分を先頭から順に開始タグが出現するまで字句解析し、該開始タグの位置が前記タグ位置記憶手段に記憶されていない場合、該開始タグの位置を前記主タグ一時記憶手段に格納する主開始タグ解析手段と、
    前記主開始タグ解析手段による字句解析において、前記開始タグの位置が前記タグ位置記憶手段に記憶されている場合、該開始タグに対応する前記終了タグを該タグ位置記憶手段から読み出し、該開始タグの位置から、読み出した該終了タグの位置までの部分をスキップする主スキップ手段と、
    前記テキストのうち、解析されていない部分を先頭から順に、終了タグが出現するまで字句解析し、該終了タグの位置と、前記主タグ一時記憶部に最後に格納された前記開始タグの位置とを対応付けて前記タグ位置記憶手段に格納する主終了タグ解析手段と、
    を有する請求項に記載の構文解析装置。
  4. 前記副字句解析手段は、
    開始タグの位置を一時記憶する副タグ一時記憶部と、
    前記所定の位置からの前記テキストのうち、解析されていない部分を、先頭から順に開始タグが出現するまで字句解析し、出現した該開始タグの位置が前記タグ位置記憶手段に記憶されていない場合、該開始タグの位置を前記副タグ一時記憶部に格納する副開始タグ解析手段と、
    前記副開始タグ解析手段による字句解析において、前記開始タグの位置が前記タグ位置記憶手段に記憶されている場合、該開始タグに対応する前記終了タグを該タグ位置記憶手段から読み出し、該開始タグの位置から、読み出した該終了タグの位置までの部分をスキップする副スキップ手段と、
    前記所定の位置からの前記テキストのうち、解析されていない部分を、先頭から順に終了タグが出現するまで字句解析し、該終了タグの位置と、前記副タグ一時記憶部に最後に格納された前記開始タグの位置とを対応付けて前記タグ位置記憶手段に記憶する副終了タグ解析手段と、
    を有する請求項に記載の構文解析装置。
  5. 前記副字句解析手段は、前記所定の位置から、タグの末尾の文字が出現するまで、前記テキストをスキップし、該スキップ後、タグの先頭の文字が出現するまで、該テキストをスキップする開始時スキップ手段を更に有する、請求項に記載の構文解析装置。
  6. 前記並列解析手段は、使用できるリソース量が所定値以上であれば、前記テキストを並列に構文解析する、請求項1乃至のいずれか1項に記載の構文解析装置。
  7. 前記並列解析手段は、前記構文解析において、並列化した回数が上限値以下であれば、前記テキストを並列に構文解析する、請求項1乃至のいずれか1項に記載の構文解析装置。
  8. 前記リソースは、CPU、タスク、スレッド、又はCPUの使用時間を含む、請求項1乃至のいずれか1項に記載の構文解析装置。
  9. 前記並列解析手段により構文解析された結果に基づいて前記テキストを表示するブラウザを更に有する、請求項1乃至のいずれか1項に記載の構文解析装置。
  10. 前記マークアップ言語は、XML(Extensible Markup Language)である、請求項1乃至のいずれか1項に記載の構文解析装置。
  11. 前記マークアップ言語は、HTML(Hyper Text Markup Language)であり、
    前記ブラウザは、HTMLブラウザである、請求項に記載の構文解析装置。
  12. タグ位置取得手段が、割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおける、開始タグの位置と、該開始タグに対応する終了タグの位置とを取得し、取得した前記開始タグの位置と、前記終了タグの位置とを対応付けてタグ位置記憶手段に格納し、
    並列解析手段が、前記テキストを、前記タグ位置記憶手段に記憶された前記開始タグの位置まで構文解析したとき、該開始タグと対応する前記終了タグの位置を該タグ位置記憶手段から読み出し、該開始タグと、該開始タグに対応する終了タグと間の文字数を算出し、該文字数が閾値以上であれば、該開始タグと該終了タグとの間の部分と、該終了タグ以降の部分とを異なるリソースで並列に構文解析し
    調整手段が、前記テキストにおける、前記タグ位置取得手段により前記字句解析が行われている位置から、前記並列解析手段により前記構文解析が行われている位置を引いた値が、正の値で所定の範囲内であり、且つ前記構文解析の処理速度ができるだけ速くなるように、該タグ位置取得手段と該並列解析手段とに割り当てるリソースの割合を調整する、構文解析方法。
  13. コンピュータに、
    割り当てられたリソースを使用して、マークアップ言語で記述されたテキストを順次、字句解析していき、該テキストにおける、開始タグの位置と、該開始タグに対応する終了タグの位置とを取得し、取得した前記開始タグの位置と、前記終了タグの位置とを対応付けてタグ位置記憶手段に格納するタグ位置取得手順、
    前記テキストを、前記タグ位置記憶手段に記憶された前記開始タグの位置まで構文解析したとき、該開始タグと対応する前記終了タグの位置を該タグ位置記憶手段から読み出し、該開始タグと、該開始タグに対応する終了タグと間の文字数を算出し、該文字数が閾値以上であれば、該開始タグと該終了タグとの間の部分と、該終了タグ以降の部分とを異なるリソースで並列に構文解析する並列解析手順、及び
    前記タグ位置取得手順における前記字句解析の処理速度をできるだけ速くし、前記テキストにおける、該字句解析が終わり、前記構文解析手順における前記構文解析が終わっていない部分の文字数を所定の範囲内にするように、前記タグ位置取得処理に割り当てるリソース量と前記並列解析処理に割り当てるリソース量とを調整する調整手順、
    を実行させるためのプログラム。
JP2009134056A 2009-06-03 2009-06-03 構文解析装置、構文解析方法、及びプログラム Expired - Fee Related JP5338487B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009134056A JP5338487B2 (ja) 2009-06-03 2009-06-03 構文解析装置、構文解析方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009134056A JP5338487B2 (ja) 2009-06-03 2009-06-03 構文解析装置、構文解析方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2010282347A JP2010282347A (ja) 2010-12-16
JP5338487B2 true JP5338487B2 (ja) 2013-11-13

Family

ID=43539033

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009134056A Expired - Fee Related JP5338487B2 (ja) 2009-06-03 2009-06-03 構文解析装置、構文解析方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP5338487B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7278705B2 (ja) 2016-11-30 2023-05-22 三星電子株式会社 自律走行経路生成方法及びその装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112800078A (zh) * 2021-02-04 2021-05-14 北京明略软件系统有限公司 基于javascript的轻量级文本标注方法、系统、设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0668128A (ja) * 1992-08-19 1994-03-11 Meidensha Corp 形態素解析処理方法
JP2002312339A (ja) * 2001-04-09 2002-10-25 Nec Corp Wwwサーバ/クライアントシステム、そのシステムにおける構文解析方法及び構文解析のためのプログラム
JP2005004331A (ja) * 2003-06-10 2005-01-06 Fuji Xerox Co Ltd 情報処理装置及び情報処理方法
JP2005234837A (ja) * 2004-02-19 2005-09-02 Fujitsu Ltd 構造化文書処理方法、構造化文書処理システム及びそのプログラム
EP1743255A4 (en) * 2004-04-08 2008-11-05 Justsystems Corp DEVICE FOR PROCESSING DOCUMENTS USING A MARKUP LANGUAGE

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7278705B2 (ja) 2016-11-30 2023-05-22 三星電子株式会社 自律走行経路生成方法及びその装置

Also Published As

Publication number Publication date
JP2010282347A (ja) 2010-12-16

Similar Documents

Publication Publication Date Title
CN104704489B (zh) 预测文档资源的使用
US8181105B2 (en) Apparatus, method, and program that performs syntax parsing on a structured document in the form of electronic data
JP4039484B2 (ja) XPath評価方法、これを用いたXML文書処理システム及びプログラム
US8065685B2 (en) Method, system and apparatus for a transformation engine for use in the processing of structured documents
JP5081149B2 (ja) 複数のプロセッサを備える機器上でのxslt処理における文書内並列処理をサポートする方法
Lam et al. XML document parsing: Operational and performance characteristics
US6859810B2 (en) Declarative specification and engine for non-isomorphic data mapping
US20040068487A1 (en) Method for streaming XPath processing with forward and backward axes
US20090006944A1 (en) Parsing a markup language document
US8392467B1 (en) Directing searches on tree data structures
US7409636B2 (en) Lightweight application program interface (API) for extensible markup language (XML)
Dai et al. A 1 cycle-per-byte XML parsing accelerator
US8880557B2 (en) Method, program, and system for dividing tree structure of structured document
US7430586B2 (en) System and method for managing memory
US8543898B2 (en) Techniques for more efficient generation of XML events from XML data sources
CN110347390B (zh) 一种快速生成web页面的方法、存储介质、设备及系统
WO2005111824A2 (en) Method and system for processing of text content
CN108519908A (zh) 一种任务动态管理方法和装置
JP5338487B2 (ja) 構文解析装置、構文解析方法、及びプログラム
US8782514B1 (en) Parallel XML parsing using meta-DFAs
Pan et al. Simultaneous transducers for data-parallel XML parsing
CN114417066A (zh) 面向大规模时序rdf图数据的查询方法及系统
Absalyamov et al. High-performance holistic XML twig filtering using GPUs
Deng et al. Incremental maintenance of the minimum bisimulation of cyclic graphs
Deshmukh et al. An empirical evaluation of optimization parameters in xml parsing for performance enhancement

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120514

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130522

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: 20130709

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130722

R150 Certificate of patent or registration of utility model

Ref document number: 5338487

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees