(57)【要約】【課題】スクリプト言語で記述されたアプリケーションの起動および切り替えを高速化する。【解決手段】スクリプトプログラムの実行が指示される前に、予め前記スクリプトプログラムを読み込み、前記スクリプトプログラムの構文を解析する解析手段１０２、Ｓ２０１、Ｓ２０２と、前記解析手段の構文解析結果を保存する保存手段１０４と、前記スクリプトプログラムの実行が指示されると、前記保存手段に保存された前記構文解析結果を用いて、前記スクリプトプログラムから中間コードを生成する生成手段１０５と、前記生成手段により生成された中間コードを実行する実行手段１０７とを具備する。【選択図】図２
2007179153.tif 000002
【特許請求の範囲】
【請求項１】
スクリプト言語で記載されたスクリプトプログラムを実行する装置であって、
前記スクリプトプログラムの実行が指示される前に、予め前記スクリプトプログラムを読み込み、前記スクリプトプログラムの構文を解析する解析手段と、
前記解析手段の構文解析結果を保存する保存手段と、
前記スクリプトプログラムの実行が指示されると、前記保存手段に保存された前記構文解析結果を用いて、前記スクリプトプログラムから中間コードを生成する生成手段と、
前記生成手段により生成された中間コードを実行する実行手段と、
を具備することを特徴とするスクリプトプログラム実行装置。
【請求項２】
前記スクリプトプログラムは複数の関数を含み、前記中間コード生成手段は、前記関数の中間コードを生成し、
前記関数の等価性を判定する判定手段を更に具備し、
前記実行手段は、前記判定手段により互いに等価な関数が前記スクリプトプログラム中に存在すると判定された場合、一方の関数の実行において生成された関数の中間コードを、他方の関数の実行において共用することを特徴とする請求項１記載のスクリプトプログラム実行装置。
【請求項３】
前記スクリプトプログラムは、ＥＣＭＡＳｃｒｉｐｔにより記述されたプログラムであることを特徴とする請求項１又は２記載のスクリプトプログラム実行装置。
【請求項４】
複数のスクリプトプログラムを含むアプリケーションが記録された光ディスクを再生する光ディスク装置であって、
前記光ディスクに記録された情報を、光ビームを用いて再生するディスクドライブと、
前記ディスクドライブに前記光ディスクが挿入されたとき、予め前記光ディスクから前記スクリプトプログラムを読み込む読み込み手段と、
前記読み込み手段により読み込まれたスクリプトプログラムの構文を解析する解析手段と、
前記解析手段の構文解析結果を保存する保存手段と、
前記アプリケーションの実行が指示されると、前記保存手段に保存された前記構文解析結果を用いて、前記スクリプトプログラムから中間コードを生成する生成手段と、
前記生成手段により生成された中間コードを実行する実行手段と、
を具備することを特徴とする光ディスク装置。
【請求項５】
前記複数のスクリプトプログラムはそれぞれ関数を含み、前記中間コード生成手段は、前記関数の中間コードを生成し、
前記関数の等価性を判定する判定手段を更に具備し、
前記実行手段は、前記判定手段により互いに異なるアプリケーションで等価な関数が存在すると判定された場合、一方のアプリケーションの実行において変換された関数の中間コードを、前記互いに異なるアプリケーションにおいて共用することを特徴とする請求項４記載の光ディスク装置。
【請求項６】
前記解析手段は、前記光ディスクの電源投入時、最後に再生したタイトルのスクリプトプログラムを優先的に構文解釈することを特徴とする請求項４記載の光ディスク装置。
【請求項７】
前記スクリプトプログラムは、ＥＣＭＡＳｃｒｉｐｔにより記述されたプログラムであること特徴とする請求項４乃至６のうち１項に記載の光ディスク装置。
【請求項８】
スクリプト言語で記載されたスクリプトプログラムを実行する方法であって、
前記スクリプトプログラムの実行が指示される前に、前記スクリプトプログラムを予め読み込み、前記スクリプトプログラムの構文を解析するステップと、
前記スクリプトプログラムの構文解析結果を保存するステップと、
前記スクリプトプログラムの実行が指示されると、前記保存された構文解析結果を用いて、前記スクリプトプログラムから中間コードを生成するステップと、
前記生成された中間コードを実行するステップと、
を具備することを特徴とするスクリプトプログラム実行方法。
【請求項９】
前記スクリプトプログラムは複数の関数を含み、前記中間コードを生成するステップは、前記関数の中間コードを生成し、
前記関数の等価性を判定するステップを更に具備し、
前記中間コードを実行するステップは、互いに等価な関数が前記スクリプトプログラム中に存在すると判定された場合、一方の関数の実行において生成された関数の中間コードを、他方の関数の実行において共用することを特徴とする請求項８記載のスクリプトプログラム実行方法。
【請求項１０】
前記スクリプトプログラムは、ＥＣＭＡＳｃｒｉｐｔにより記述されたプログラムであること特徴とする請求項８又は９記載のスクリプトプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＨＤＤＶＤ(High Definition DVD)等に用られ、スクリプト言語で記述されたスクリプトプログラムの実行方法に関する。
【背景技術】
【０００２】
従来、特定のプラットフォーム（ＣＰＵ等のハードウェアやＯＳといった基礎部分）に依存しないプログラム言語として、スクリプト言語がある。ＣやＣ＋＋などのコンパイル方式の言語では、ソースコードから各プラットフォームに特化したオブジェクトコードを生成するコンパイルという処理が必要とされるのに対し、スクリプト言語では、インタープリタと呼ばれる処理系上でソースコードが読み込まれ実行される。
【０００３】
コンパイル方式の言語と異なり、スクリプト言語では、インタープリタ上でソースコードが直接実行される仕組みとなっているため、プラットフォームに依存しないプログラミングが可能となっている。そのようなスクリプト言語として、Ｗｅｂブラウザで広く利用されているＪａｖａ（登録商標）Ｓｃｒｉｐｔ  （Ｎｅｔｓｃａｐｅ社），  ＪＳｃｒｉｐｔ  （Ｍｉｃｒｏｓｏｆｔ社），  ＡｃｔｉｏｎＳｃｒｉｐｔ  （Ｍａｃｒｏｍｅｄｉａ社）  などがある。
【０００４】
スクリプト言語を実行するインタープリタの一般的な構成は、ソースコードを読み取り構文構造を解析し、内部表現に変換する構文解析部と、その構文解析結果である構文木を利用して中間コード（もしくは仮想コードと呼ばれる）を生成するコード生成部、および生成したコードを実行する実行エンジン（仮想マシンと呼ばれる）からなる。インタープリタの実装方式によっては、中間コードを生成せずに構文木を直接実行する方式もある。ただし、この場合には実行速度が中間コードを生成する場合に比較して遅いという欠点があるため、多くの処理系では中間コードを生成する方式が一般的となっている。
【０００５】
下記特許文献１には、ソースプログラムを翻訳し、中間言語ファイルを保存しておくインタープリタ方式のプログラム実行方法が開示されている。
【特許文献１】特開平１−１４４１２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＨＤＤＶＤプレーヤにおいても、コンテンツの動的な動作記述などにスクリプト言語を採用している。ここで動的な動作記述とは、例えばリモコンのスキップボタンが押下された場合の動作として、あるコンテンツでは再生のスキップ動作を実行する記述とし、他のコンテンツでは例えばカーソル移動というような動作を実行するようにプログラムを記述することを示す。ＨＤＤＶＤで採用されているスクリプト言語はＥＣＭＡ２６２と呼ばれる標準規格（以下ＥＣＭＡＳｃｒｉｐｔと呼ぶ）をベースにしている。
【０００７】
ＥＣＭＡＳｃｒｉｐｔでは、ＣやＣ＋＋などのコンパイラ言語で一般に用いられるオブジェクトファイルに相当するものがないため、新たなアプリケーションを実行する度に、ソースファイルからスクリプトを読み込んで実行するまでの、前述した構文解析および中間コードの生成といった一連の処理が必要となる。
【０００８】
上記特許文献１では、インタープリタで一意な名前をソースプログラムに付けておき、ソースプログラムの実行要求があると、中間言語ファイルがあるか調べる。あった場合は、当該中間言語ファイルを用いてソースプログラムを実行する。
【０００９】
上記ＥＣＭＡＳｃｒｉｐｔにはライブラリ化機能がないために、複数のアプリケーションで共通の関数を利用している場合であっても、アプリケーション毎に構文解析、中間コード生成などの処理が必要となる。また、ＥＣＭＡＳｃｒｉｐｔでは、同じ関数名を使用して、実際には異なる関数を定義できる。従って、複数のソースプログラムで同じ関数名の関数を利用している場合であっても、それら関数が異なることがある。
【００１０】
そのため、従来のスクリプト言語の処理系では、アプリケーションを実行する際に、ソースファイルの読み込み、構文解析、中間コード生成など一連の処理が必要になるため、アプリケーションの起動、切り替え処理に時間がかかり、さらに同じ関数を別々のアプリケーションが利用する場合でも個別の処理が行われるため必要以上のメモリを消費するという問題があった。
【００１１】
本発明は以上の問題を解決するために鑑みられたものである。すなわち、スクリプト言語で記述されたアプリケーションの起動および切り替えを高速化することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の１実施形態に係るスクリプトプログラム実行装置は、スクリプトプログラムの実行が指示される前に、予め前記スクリプトプログラムを読み込み、前記スクリプトプログラムの構文を解析する解析手段と、前記解析手段の構文解析結果を保存する保存手段と、前記スクリプトプログラムの実行が指示されると、前記保存手段に保存された前記構文解析結果を用いて、前記スクリプトプログラムから中間コードを生成する生成手段と、前記生成手段により生成された中間コードを実行する実行手段とを具備する。これにより、スクリプト言語で記述されたアプリケーションの起動および切り替えが高速化される。
【００１３】
前記スクリプトプログラムは複数の関数を含み、前記中間コード生成手段は、前記関数の中間コードを生成し、前記関数の等価性を判定する判定手段を更に具備し、前記実行手段は、前記判定手段により互いに等価な関数が前記スクリプトプログラム中に存在すると判定された場合、一方の関数の実行において生成された関数の中間コードを、他方の関数の実行において共用する。これにより、同じ関数を複数のアプリケーションで利用する場合などのメモリ使用効率が改善される。
【発明の効果】
【００１４】
本発明によれば、スクリプト言語で記述されたアプリケーションの起動および切り替えの高速化が実現される。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して本発明の実施の形態を説明する。
【００１６】
図１は本発明によるスクリプトプログラム実行装置１００の概要構成を示すブロック図である。このスクリプトプログラム実行装置１００は、ソフトウェアとしてメモリ上に展開する形式でもよいし、ハードウェアとして各製品に個別に構成してもよい。
【００１７】
スクリプトファイル１０１は、通常はアスキーテキストファイルとして与えられる。このスクリプトファイルは構文解析手段１０２に与えられ、構文木と呼ばれるツリー状のデータ構造が構築される。構文木１１０はプログラムの文法的要素を木構造に変換したものである。生成された構文木１１０は構文木保存手段１０４に保持され、その構文木は構文木管理手段１０３により管理される。スクリプトファイル１０１から構文木１１０を生成する処理は、スクリプト自身の実行とは無関係であり、スクリプトファイルが与えられた時点でスクリプトの実行指示とは関係なく構文木１１０に変換され、構文木保存手段１０４に保持される。
【００１８】
次に、この構文木１１０から中間コード生成手段１０５により、仮想マシン上の命令コードである中間コード１１１が生成される。中間コード１１１は中間コード管理手段１０８により各関数と対応付けて、中間コード保存手段１０９に保存される。生成された中間コード１１１は中間コード実行手段（仮想マシン）１０７により実行される。スクリプトの実行とはこの中間コードを実行することである。
【００１９】
ＨＤＤＶＤプレーヤで採用しているＥＣＭＡＳｃｒｉｐｔでは、スクリプトは関数定義とグローバルコードと呼ばれる関数の外に記述されたコードから構成される。スクリプトにおいて最初に実行される部分はこのグローバルコードである。グローバルコードはどの関数にも属さないコードであるが、仮想的にＧｌｏｂａｌという関数のコードであると解釈される。関数等価性判定手段１０６は別々の関数が等価なものであるかどうかを判定する手段である。
【００２０】
図２は以上述べた構成を利用して、スクリプトファイルすなわちスクリプトプログラムを読み込んでから実行するまでの処理の流れを示したフローチャートである。
【００２１】
先ず、構文解析手段１０２は、スクリプトのソースファイル１０１を読み込み（Ｓ２０１）、構文木１１０を生成する（Ｓ２０２）。生成された構文木は構文木管理手段１０３により構文木保存手段１０４に保存される。これらの処理（Ｓ２０１、Ｓ２０２）は、スクリプトプログラムの実行が指示される前（起動前）に予め行われる。構文木１１０を生成することにより、スクリプトプログラム中でどの部分が関数でどれがグローバルコードであるかを判定できる。グローバルコードは、図１に示すスクリプトファイル１０１中の１００ａとして示されている。
【００２２】
プログラムの実行が指示されると、中間コード生成手段１０５は、グローバルコードを中間コードに変換する（Ｓ２０３）。この中間コードは中間コード実行手段１０７に転送されると共に、中間コード管理手段１０８により中間コード保存手段１０９に保存される。中間コード実行手段１０７は、中間コードに変換されたグローバルコードをステップ実行する（Ｓ２０４）。ここでステップ実行とは、中間コードを解釈しながら逐次実行することを意味する。解釈した中間コードが関数呼び出しかどうか調べ（Ｓ２０５）、関数呼び出しではない場合、中間コード実行手段１０７は、その中間コードを単純に実行する（Ｓ２０９）。もし、関数呼び出しの場合、関数等価性判定手段１０６は、その関数本体が既に中間コードに変換されているか調べる（Ｓ２０６）。関数本体が変換されていない場合、中間コード生成手段１０５は関数本体を中間コードに変換し（Ｓ２０７）、中間コード実行手段１０７は、変換された中間コードを実行する（Ｓ２０８）。この中間コードの実行は、その実行中にさらに別の関数呼び出しを伴う場合があり、再帰的な処理となる。
【００２３】
次に、ステップＳ２０８における関数の中間コードを実行する再帰的な処理について説明する。図３はこの処理を示すフローチャートである。
【００２４】
ステップＳ３０２において、グローバルコードの処理と同様に、中間コード実行手段１０７は関数の中間コードをステップ実行する。中間コードが関数呼び出しかどうか調べ（Ｓ３０３）、その中間コードが関数呼び出しでない場合、中間コード実行手段１０７はその中間コードを実行する（Ｓ３０７）。そしてそのコードがリターン命令かどうか調べ（Ｓ３０８）、リターン命令なら、中間コード実行手段１０７は処理を終了する（Ｓ３０９）。
【００２５】
一方、関数呼び出しの場合、関数等価性判定手段１０６は関数が中間コードに変換されているかどうかを調べる（Ｓ３０４）。変換されていない場合、中間コード生成手段１０５は関数を中間コードに変換する（Ｓ３０５）。そして、中間コード実行手段１０７は、関数の中間コードを再帰的に実行する（Ｓ３０６）。
【００２６】
ここでは図示していないが、一旦、中間コードに変換された関数の構文木はメモリ中から削除してもよい。図４にその動作を概念的に示す。ここでは、アプリケーション(program)は関数ｆｕｎｃ１と関数ｆｕｎｃ２から構成されている（状態４０１）。まず、ｆｕｎｃ１が中間コードに変換され、ｆｕｎｃ１に相当する構文木が削除される（状態４０２）。次にｆｕｎｃ２が呼び出され中間コードを生成し、対応する構文木を削除する（状態４０３）。
【００２７】
次に、別々のアプリケーションで共通の関数が利用されている場合、その関数をアプリケーション間で共有する方式について説明する。ＥＣＭＡＳｃｒｉｐｔではＣやＣ＋＋などのプログラム言語と異なり、同じ関数名であっても実行時に別の関数として再定義することができる。そのため、関数の等価性を関数名だけでは判断できず、関数本体のコードを調べる必要がある。ここでは関数の等価性判定として、変数名の置き換え、ブロック文の統一化、および予約語の置き換えを行い、その結果の文字列の等価性で判定している。
【００２８】
図５に関数の等価性判定の具体的な例を示す。
【００２９】
ｐｒｏｇｒａｍ１（５０１）とｐｒｏｇｒａｍ２（５０２）をそれぞれ本手法を用いて文字列に変換したものが文字列５０３となり、関数ｆｕｎｃ１とｆｕｎｃ４が同一であることがわかる。ここで、ｐｒｏｇｒａｍ１では関数名ｆｕｎｃ１をｖ０、変数ａ、ｂ、ｃをそれぞれｖ１、ｖ２、ｖ３に置き換え、ｐｒｏｇｒａｍ２では関数名ｆｕｎｃ４をｖ０、変数ｘ、ａ、ｄをそれぞれｖ１、ｖ２、ｖ３に置き換えている。また予約語であるｆｕｎｃｔｉｏｎ、ｉｆ、ｅｌｓｅ、ｒｅｔｕｒｎをそれぞれ％Ｆ、％Ｉ、％Ｅ、％Ｒに置き換えている。他の予約語についても同様の変換を行う。また、ｉｆ文などにおける文は必ず‘｛’と‘｝’のついたブロック文とし、複数の連続した空白は１つにするなどの正規化を行っている。以下では、このように変換された文字列表現を関数の標準正規化文字列と呼ぶ。
【００３０】
関数等価性判定手段１０６は、このようにして得られた標準正規化文字列を、その関数名と共にレジスタ１０６ａに格納しておく。関数等価性判定手段１０６はまた、後のアプリケーション実行時に関数呼び出しが発生した場合、呼び出した関数の標準正規化文字列と、レジスタ１０６ａに格納されている関数の標準正規化文字列とを比較し、関数の等価性を判定する。
【００３１】
ｐｒｏｇｒａｍ１とｐｒｏｇｒａｍ２中でｆｕｎｃ１とｆｕｎｃ４が共通の関数であることが判定されると、中間コードが共用できる。図６は、その様子を概念的に示す図である。ｐｒｏｇｒａｍ１のｆｕｎｃ１が中間コードに変換され、実行中にｐｒｏｇｒａｍ２のｆｕｎｃ４が呼び出される。ｆｕｎｃ４はその時点ではまだ中間コードに変換されていない。関数等価性判定手段１０６により、ｆｕｎｃ４がｆｕｎｃ１と等価であると判定された時点で、ｆｕｎｃ４の中間コードを生成する代わりに、ｆｕｎｃ１の中間コードを中間コード保持手段１０９から読出し共用する。
【００３２】
図７は関数を中間コードに変換する中間コード生成手段１０５及び等価性判定手段１０６の動作を示すフローチャートである。
【００３３】
先ず、図５で説明したように関数等価性判定手段１０６は、関数の標準正規化文字列を求める（Ｓ７０２）。次に、求めた標準正規化文字列と等価な関数があるかどうか、レジスタ１０６ａを調べる（Ｓ７０３）。等価な関数がない場合、中間コード生成手段１０５は本関数の構文木から中間コードを生成し（Ｓ７０５）、その中間コードと関数を関連づけて中間コード保存手段１０９に保存する（Ｓ７０６）。また生成された中間コードは、中間コード実行手段１０７に転送されて実行される。
【００３４】
中間コードを中間コード保存手段１０９に保存するには、比較的大きなメモリ容量を必要とする。従って、メモリ容量制限の関係から、中間コードは一度実行されると、消去される場合がある。従って、標準正規化文字列と等価な関数がある場合には、その関数が中間コードに変換されているか（中間コード保存手段１０９に保存されているか）否か調べ（Ｓ７０４）、変換されていない場合には構文木から中間コードに変換する（Ｓ７０５）。ステップＳ７０４で、変換されている場合には、変換されている中間コードと本関数とを関連づける（Ｓ７０６）。つまり、本関数に対応する中間コードを中間コード保存手段１０９から読出し、中間コード実行手段１０７に転送する。
【００３５】
一般に、構文木から中間コードを生成する処理は、大きなメモリ容量及び処理時間が必要になるため、コストが非常に高くなる。従って、本発明のように、等価の関数で既に中間コードが生成されている場合には、その中間コードを共用するという処理を実行することにより、無駄な処理を大幅に省略することができる。関数の等価性は文字列の比較で行うことにより、ハッシュ検索などの高速な従来手法を利用することができる。なお、関数の等価性判定として、標準正規化文字列を直接比較するのではなく、その文字列からＭＤ５などの一方向ハッシュ関数を利用して数値同士の比較などに置き換えてもよい。
【００３６】
次に、本発明を光ディスク装置に適用したときの実施例について説明する。図８は本発明が適用される光ディスク装置１の概略構成を示すブロック図である。
【００３７】
光ディスク装置１は、ＤＶＤあるいはＨＤＤＶＤ等の光ディスクに対して映像、音声及び他の情報（以下単に情報あるいは映像情報という）の記録及び再生を行う。光ディスク装置１は、映像情報を所定の光ディスクに記録し、光ディスクに既に記録されている映像情報を再生する記録再生部２０４と、本発明によるスクリプトプログラム実行装置１００と、本光ディスク装置１の各部の動作を制御するマイクロコンピュータ（ＭＰＵ）２０５とを含む。ＭＰＵ２０５は各種制御プログラムを含むＲＯＭ及び該制御プログラムを実行する際にワークエリアとして使用されるＲＡＭを含む。
【００３８】
記録再生部２０４は、光ビームを用いてディスクＤに情報の記録及び再生が可能なディスクドライブユニット２０４ｂ、ディスクドライブユニット２０４ｂにセットされたディスクＤに記録される情報、あるいはディスクＤから再生された情報の一定量を一時的に保持する一時記録部２０４ａ、大容量データを記録可能なＨＤＤ２０４ｄ、及びデータプロセッサ２０４ｃを含んでいる。
【００３９】
データプロセッサ２０４ｃは、ＭＰＵ２０５の制御に従って、エンコーダ２０３から出力された記録データをディスクドライブ２０４ｂに供給したり、ディスクＤの再生信号をディスクドライブ２０４ｂから取り込み、デコーダ２０６に供給する。又データプロセッサ２０４ｃは、ＭＰＵ２０５の制御に従って、エンコーダ２０３から出力された記録データをＨＤＤ２０４ａに供給したり、ＨＤＤ２０４ａからの再生信号をデコーダ２０６に供給する。
【００４０】
エンコーダ２０３は入力された映像信号をエンコード（圧縮）する。エンコーダ２０３には、記録対象である映像信号を外部から入力するためのＡＶ入力端子２０１、及び例えば放送事業者等に代表される情報配信者から配信される映像情報を受信可能なチューナ２０２が接続されている。
【００４１】
デコーダ２０６は記録再生部２０４から出力された映像情報をデコード（伸長）する。デコーダ２０６には、デコードした再生情報をテレビ等のモニタ装置に供給するためのＡＶ出力端子２０７が接続されている。
【００４２】
ＭＰＵ２０５には、ユーザからの指示（操作入力）を受け付ける操作入力部１２０が接続されている。操作入力部２１０は、図示しないリモコン（リモートコントロール端末）から送信された制御信号を受け入れるデータ受信部２１０ａ、ユーザから直接入力を受付け、制御信号をＭＰＵ２０５へ出力可能な操作パネル２１０ｂを含む。
【００４３】
以下の説明では、ディスクＤは映画などの映像コンテンツが予め複数記録されたＨＤＤＶＤディスクとする。
【００４４】
図９はＨＤＤＶＤで用いられるスクリプトに関わるデータ構造を示した図である。これらのデータはディスクの他の管理情報と共にＨＤＤＶＤの内周側に記録され、ディスクＤが装置に挿入された直後、最初に読み出される。
【００４５】
ＨＤＤＶＤではコンテンツに関する情報はプレイリスト９０１と呼ばれるＸＭＬ形式のファイルで記述される。プレイリスト中には、複数のアプリケーション９０２、９０３を指定する記述があり、個々のアプリケーションはマニフェストと呼ばれるＸＭＬ形式のデータで表現される。図９では、プレイリスト９０１の例えば最初に記述されたタイトル（Ｔｉｔｌｅ）すなわち映像コンテンツでは”ｍａｎ１．ｘｍｌ”というマニフェストが指定され、このマニフェストが９０２のアプリケーション１（ａｐｐ１．ｘｍｌ）にリンクされていることを示している。このアプリケーションには、例えばメニューを表示するようなプログラムが含まれる。
【００４６】
各マニフェストファイル（アプリケーション）中には１以上のスクリプトファイル９０４、９０５、９０６を指定することができる。これらの複数のスクリプトファイルは、まとめて１つのアプリケーションとして実行される。すなわち、スクリプトファイル１（９０４）とスクリプトファイル２（９０５）をまとめて１つのアプリケーション（９０２）が構成され、それとは別に、スクリプトファイル１（９０４）とスクリプトファイル３（９０６）をまとめてもう１つのアプリケーション（９０３）が構成される。
【００４７】
光ディスク装置１のディスクドライブ２０４ｂにディスクＤが挿入された時点で、ＭＰＵ２０５はプレイリストファイルを読み込み、構文解析手段１０２に提供することができる。従って、映像コンテンツを再生する前に必要なスクリプトファイル（ここでは、ｓｃｒｉｐｔ１．ｊｓ、ｓｃｒｉｐｔ２．ｊｓ、ｓｃｒｉｐｔ３．ｊｓ）を全て知ることができる。各スクリプトファイルには、例えばリモコンのスキップボタン（図示されず）が押下されたときの処理がプログラムとして記述されている。
【００４８】
このように、ディスクドライブ２０４ｂにディスクＤが挿入されると、ＭＰＵ２０５はディスクＤからスクリプトファイルを含む管理情報を読み込み、スクリプトプログラム実行装置１００の構文解析手段１０２を用いてスクリプトファイルを構文木に変換する。つまりここでは、図２のステップＳ２０１及びＳ２０２が実行され、作成された構文木が構文木保存手段１０４に保存される。ディスクの管理情報が読み込まれ、装置各部の設定が完了すると、ユーザからの入力が可能となる。ユーザから操作入力部２１０を介してアプリケーション実行指示が入力されると、図２のステップＳ２０３〜Ｓ２０９の処理が実行される。
【００４９】
このように、アプリケーション起動前にスクリプトの構文解析を行うことにより、アプリケーション起動・切替の際の処理が中間コード生成だけになり、より高速な処理が実現される。また、構文解析結果を保持しておき、初めて関数が呼ばれたときに逐次的に中間コードに変換することにより、最初の関数を高速に起動できるようになる。
【００５０】
光ディスク装置１はレジューム機能を有している。ユーザがディスクＤに記録された複数タイトル中の１つのタイトルを再生し、該タイトルの再生を途中で中断して、装置１の電源を切った場合、該タイトル（最後に再生したタイトル）の情報は保存される。その後、ユーザが光ディスク装置１の電源を入れ、リモコンの再生ボタンを押下すると、最後に再生したタイトルの情報が読み出され、該タイトルの中断位置から再生が再開される。このように、最後に再生したタイトルの情報を保存しておき、再生指示に応じて、最後に再生したタイトルの再生を再開させる機能をレジューム機能という。このレジューム機能はＭＰＵ２０５内に設けられたレジューム手段２０５ａにより実行される。
【００５１】
光ディスク装置１に挿入されたディスクＤに、多量のスクリプトファイルが存在する場合には、最初に実行されると予想されるスクリプトを優先的に選択して構文木に変換してもよい。そのようなスクリプトとして、上記最後に再生したタイトルのスクリプトを優先的に予め構文解析しておくことにより、アプリケーションの起動時間が短縮される。最後に再生したタイトルの情報は、上記レジューム機能により保存された情報を用いる。これは、最後に再生したタイトルを次の起動でも再生するという利用シーンが多いことから有効な手段である。
【００５２】
図９の説明に戻る。スクリプトファイル１はアプリケーション１とアプリケーション２の双方から参照されている。これは、実際のファイル名が同一（ｓｃｒｉｐｔ．ｊｓ）ということから判断できる。アプリケーション１を実行した時点で、スクリプトファイル１中の関数ｆｕｎｃ１１とｆｕｎｃ１２は中間コードに変換されメモリ（中間コード保持手段１０９）中に保持される。
【００５３】
次にアプリケーション２を実行する時点でアプリケーション１と同一のファイルｓｃｒｉｐｔ１．ｊｓが読み込まれる。このとき、関数ｆｕｎｃ１１の中間コードは共有できるが、関数ｆｕｎｃ１２の中間コードは単純には共有できない。何故なら、関数ｆｕｎｃ１２はスクリプトファイル３（ｓｃｒｉｐｔ３．ｊｓ）中で再定義されてしまうからである。すなわち、異なるファイル中の同一名の関数が常に等価なものとして実行されるとは限らない。また、同じファイル中の同一名の関数が常に等価なものとして実行されるとは限らない。更に、異なる関数名の関数が、実際には同一の機能であることもある。そこで、本発明のスクリプト実行手段の一つである関数の等価性判定手段１０６を用いて、図５のようにスクリプトファイル１中の関数ｆｕｎｃ１２とスクリプトファイル３中の関数ｆｕｎｃ１２が等価なものかどうかを調べ、等価なものでれば、中間コードを共用し、等価でなければ新に中間コードを生成する。
【００５４】
一方、スクリプトファイル２とスクリプトファイル３は別のファイルであるから、上記したように関数名が異なっても関数本体の動作は同一である可能性がある。いま、関数ｆｕｎｃ２１と関数ｆｕｎｃ３２のそれぞれの標準正規化文字列が同一であれば、両者の関数は同一であると判断される。既にアプリケーション１が実行され、関数ｆｕｎｃ２１が中間コードに変換されていれば、アプリケーション２を実行する際に、関数ｆｕｎｃ３２を中間コードに変換する必要はなく、関数ｆｕｎｃ２１の中間コードを再利用することができる。
【００５５】
関数等価性判定手段１０６により同一の関数と判断された関数が、複数のアプリケーションで利用されている場合には、生成された中間コードを共用することにより、処理コストの非常に高い中間コード生成処理を省略することができ、関数起動の高速化、メモリ使用量の削減効果がある。
【００５６】
以上の説明はこの発明の実施の形態であって、この発明の装置及び方法を限定するものではなく、様々な変形例を容易に実施することができる。
【図面の簡単な説明】
【００５７】
【図１】本発明によるスクリプトプログラム実行装置１００の概要構成を示すブロック図である。
【図２】スクリプトファイルを読み込んでから実行するまでの処理の流れを示したフローチャートである。
【図３】関数の中間コードを実行する再帰的な処理を示すフローチャートである。
【図４】中間コードに変換された関数の構文木をメモリ中から削除する動作を概念的に示す図である。
【図５】関数の等価性判定処理の具体的な例を示す図である。
【図６】プログラム間で中間コードを共用する様子を概念的に示す図である。
【図７】中間コード生成手段１０５及び等価性判定手段１０６の動作を示すフローチャートである。
【図８】本発明が適用される光ディスク装置１の概略構成を示すブロック図である。
【図９】ＨＤＤＶＤで用いられるスクリプトに関わるデータ構造を示した図である。
【符号の説明】
【００５８】
１０２…構文解析手段、１０３…構文木管理手段、１０４…構文木保存手段、１０５…中間コード生成手段、１０６…関数等価性判定手段、１０７…中間コード実行手段、１０８…中間コード管理手段、１０９…中間コード保存手段。
【図１】
2007179153.tif 000003
【図２】
2007179153.tif 000004
【図３】
2007179153.tif 000005
【図４】
2007179153.tif 000006
【図５】
2007179153.tif 000007
【図６】
2007179153.tif 000008
【図７】
2007179153.tif 000009
【図８】
2007179153.tif 000010
【図９】
2007179153.tif 000011