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