アカウント名:
パスワード:
まさか識別子のうち辞書に載ってるもののユニーク数を数えてるだけだったりしないよな?
それにかなり近いです。プログラミング言語の文脈等はほとんど考慮されていません。
1. 関数定義をトークン分け。2. トークン列を抽象トークン列に変換。3. 抽象トークン列からトークンの順序構造を取り除いて、抽象語彙集合を作る。4. それぞれの関数定義の抽象語彙集合の部分集合のうち、全ての関数定義で部分抽象語彙集合が異なっていて、最も大きさが小さくなる様に取る(最小部分中小語彙集合)。5. 抽象語彙集合と最小部分中小語彙集合の大きさの比が冗長度を表していると考えられる。
> プログラミング言語の文脈等はほとんど考慮されていません。
考慮されていないというより、考慮しなくて良いほうが、構文解析も言語仕様もシンプルになるので、意識的に文脈に依存しない文法を採用しているのだと思います。
趣味レベルの知識ですが、大抵のプログラミング言語は、LR法 [wikipedia.org]をベースとした構文解析を使っており、Javaも基本的にはそうだと考えています。
LR法は、文脈自由文法 [wikipedia.org]に属する方式です。情報工学の世界では、文脈自由文法と文脈依存文法 [wikipedia.org]とかがあります。
パーザーを作るにあたって、識別子が前後関係に依存する場合、先読みや 2-pass の解析が必要になったりするなど、バリデーションを含めた実装と言語仕様が複雑になる傾向があります。処理が複雑になると、構文解析の速度も遅くなります。
そのため、文脈依存文法は避けられる傾向があります。また、言語仕様としても、文脈によって記法が違うと学習コストも高くなるので、シンプルな文法を追求して、覚えやすくどの文脈でも同じルールに……とすると自然に文脈自由文法(LR法ベース)になっていくのだと思います。
今どきはハードウェアの力でゴリ押しして、文脈依存文法どころかパースにチューリング機械が必要な言語を設計することも珍しくない(HTML5とか)。
Javaのストーリーから離れて、遠いところに来ましたね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
5%って (スコア:0)
まさか識別子のうち辞書に載ってるもののユニーク数を数えてるだけだったりしないよな?
Re: (スコア:2, 参考になる)
それにかなり近いです。
プログラミング言語の文脈等はほとんど考慮されていません。
1. 関数定義をトークン分け。
2. トークン列を抽象トークン列に変換。
3. 抽象トークン列からトークンの順序構造を取り除いて、抽象語彙集合を作る。
4. それぞれの関数定義の抽象語彙集合の部分集合のうち、全ての関数定義で部分抽象語彙集合が異なっていて、最も大きさが小さくなる様に取る(最小部分中小語彙集合)。
5. 抽象語彙集合と最小部分中小語彙集合の大きさの比が冗長度を表していると考えられる。
Re:5%って (スコア:1)
> プログラミング言語の文脈等はほとんど考慮されていません。
考慮されていないというより、考慮しなくて良いほうが、
構文解析も言語仕様もシンプルになるので、意識的に文脈に依存しない文法を採用しているのだと思います。
趣味レベルの知識ですが、大抵のプログラミング言語は、LR法 [wikipedia.org]をベースとした構文解析を使っており、Javaも基本的にはそうだと考えています。
LR法は、文脈自由文法 [wikipedia.org]に属する方式です。
情報工学の世界では、文脈自由文法と文脈依存文法 [wikipedia.org]とかがあります。
パーザーを作るにあたって、識別子が前後関係に依存する場合、
先読みや 2-pass の解析が必要になったりするなど、バリデーションを含めた実装と言語仕様が
複雑になる傾向があります。処理が複雑になると、構文解析の速度も遅くなります。
そのため、文脈依存文法は避けられる傾向があります。
また、言語仕様としても、文脈によって記法が違うと学習コストも高くなるので、
シンプルな文法を追求して、覚えやすくどの文脈でも同じルールに……とすると自然に
文脈自由文法(LR法ベース)になっていくのだと思います。
Re: (スコア:0)
今どきはハードウェアの力でゴリ押しして、文脈依存文法どころかパースにチューリング機械が必要な言語を設計することも珍しくない(HTML5とか)。
Re: (スコア:0)
Javaのストーリーから離れて、遠いところに来ましたね。