![]() | |
| 開発者 | デヴィン・クックとその他54名の寄稿者[1] |
|---|---|
| 最終リリース | 5.2.0 / 2012年8月18日 |
| オペレーティング·システム | ウィンドウズ |
| タイプ | LALRパーサー |
| ライセンス | zlib ライセンス(フリーソフトウェア) |
| Webサイト | ゴールドパーサー |
GOLD は、複数のプログラミング言語をサポートするように設計された無料の 解析システムです。
デザイン
このシステムは、語彙解析にDFA を使用し、構文解析にLALRアルゴリズムを使用します。これらのアルゴリズムは両方とも、テーブルを使用してアクションを決定するステート マシンです。GOLD は、LALRおよびDFA構文解析テーブルの生成プロセスを構文解析アルゴリズム自体の実際の実装から論理的に分離するという原則に基づいて設計されています。これにより、同じ文法と開発プロセスを維持しながら、異なるプログラミング言語でパーサーを実装できます。
GOLD システムは、「ビルダー」、「エンジン」、およびビルダーとエンジン間の仲介役として機能する「コンパイルされた文法テーブル」ファイル定義という 3 つの論理コンポーネントで構成されています。
ビルダー

ビルダーは、システムの主要コンポーネントであり、主要なアプリケーションです。ビルダーは、言語の構文 (文法として指定) を分析し、LALRテーブルとDFAテーブルを構築するために使用されます。このプロセス中に、文法のあいまいさが報告されます。これは、 YACCやANTLRなどのコンパイラ コンパイラによって実行されるタスクと基本的に同じです。
LALRおよびDFA解析テーブルが正常に構築されると、ビルダーはこのデータをコンパイル済み文法テーブル ファイルに保存できます。これにより、ビルダーで後で情報を再度開いたり、エンジンの 1 つで使用したりできるようになります。現在、ビルダー コンポーネントはWindows 32 ビット オペレーティング システムでのみ使用できます。
ビルダーの機能の一部は次のとおりです。
- フリーウェアライセンス
- 状態ブラウジング
- 統合テスト
- 複数ファイルのテストウィザード
- ウェブページを生成する(ハイパーリンクされた構文チャートを含む)
- テンプレートを使用してスケルトンプログラムを生成する
- 文法をYACCにエクスポートする
- テーブルをXMLまたはフォーマットされたテキストにエクスポートする
コンパイルされた文法テーブルファイル
コンパイルされた文法テーブル ファイルは、ビルダーによって生成されたテーブル情報を保存するために使用されます。
エンジン
単一のプラットフォームでのみ実行される Builder とは異なり、Engine コンポーネントは特定のプログラミング言語や開発プラットフォーム用に作成されます。Engine はLALRアルゴリズムとDFAアルゴリズムを実装します。プログラミング言語によってプログラム設計のアプローチが異なるため、Engine の実装はそれぞれ異なります。その結果、Visual Basic 6 用に作成された Engine の実装は、 ANSI C用に作成されたものとは大きく異なります。
現在、GOLD のエンジンは以下のプログラミング言語/プラットフォーム向けに実装されています。既存のエンジンのソースコードを基にして、新しいエンジンを実装することができます。
文法
GOLD 文法は、バッカス・ナウア形式、正規表現、集合表記法 に直接基づいています。
次の文法は、「Simple」と呼ばれる最小限の汎用プログラミング言語の構文を定義します。
「名前」 = 'シンプル'
「著者」 = 'デヴィン・クック'
「バージョン」 = '2.1'
「概要」 = 「これは例で使用するために設計された非常に単純な文法です」
「大文字と小文字を区別する」 = False
「開始シンボル」 = <ステートメント>
{文字列 Ch 1} = {印刷可能} - ['']
{文字列 Ch 2} = {印刷可能} - ["]
識別子 = {文字}{英数字}*
! 文字列には一重引用符または二重引用符を使用できます
StringLiteral = '' {文字列 Ch 1}* ''
| '"' {文字列 Ch 2}* '"'
NumberLiteral = {Number}+('.'{Number}+)?
コメント開始 = '/*'
コメント終了 = '*/'
コメント行 = '//'
<ステートメント> ::= <ステートメント> <ステートメント>
| <ステートメント>
<ステートメント> ::= display <式>
| display <式> ID の読み取り
| ID を割り当てる '=' <式>
| while <式> do <文> end
| if <式> then <文> end
| if <式> then <文> else <文> end
<式> ::= <式> '>' <式の追加>
| <式> '<' <式の追加>
| <式> '<=' <式の追加>
| <式> '>=' < 式の追加>
| <式> '==' <式の追加>
| <式> '<>' <式の追加>
| <式> '
<追加式> ::= <追加式> '+' <乗算式>
| <追加式> '-' <乗算式>
| <追加式> '&' <乗算式>
| <乗算式>
< Mult Exp > ::= < Mult Exp > '*' < Negate Exp >
| < Mult Exp > '/' < Negate Exp >
| <経験値を無効にする>
<否定式> ::= '-' <値>
| <値>
<値> ::=識別子
| 文字列リテラル
| 数値リテラル
| '(' <式> ')'
開発概要

最初のステップは、解析する言語の文法を記述してテストすることです。文法は、メモ帳やビルダーに組み込まれているエディターなど、任意のテキスト エディターを使用して記述できます。この段階では、コーディングは必要ありません。
文法が完成すると、ビルダーによって分析され、LALRおよびDFA解析テーブルが構築され、文法の曖昧さや問題が報告されます。その後、テーブルはコンパイルされた文法テーブル ファイルに保存され、後で解析エンジンによって使用されます。この時点で、GOLD パーサー ビルダーは不要になります。
最終段階では、テーブルはエンジンによって読み取られます。この時点で、開発プロセスは選択した実装言語に依存します。
参考文献
- ^ 「貢献者」. goldparser.org . 2017年8月28日閲覧。
外部リンク
- 公式サイト
- Wayback Machineの GOLD Yahoo グループ(2020-12-14 アーカイブ)

