2

C++で書かれたソフトウェア(openFOAM)の言語の種類を見ていると、あることに気がつきました。それは次のようなものでした。

field value;

例えば、

temperature 25;

これがどのように機能するのだろうか。等号を使用せずに温度を25に設定する方法を意味します。何か案が?

4

2 に答える 2

3

openFOAM にはそのフォーマットを理解するパーサーがあるからです。

このようなパーサーを作成するのは難しくありません。C++ (yacc や bison などのパーサー生成ツールを使用) は、非常に高速であるため、パーサーとしてよく使用されます。

C++ はチューリング完全言語であるため、他の言語でできることは何でもできます。具体的には、C++ コードのように見えないデータを処理できます。

于 2012-12-27T22:27:48.943 に答える
1

プログラミング言語は通常、コンテキストフリーです。言語が文脈に依存しない場合は、解析できます (些細なこととは言いませんが、以前に何度も解決された問題であり、コンパイラ クラスを使用する場合は、単純な言語に対してそれを行う必要があります)。

パーサーは、 format の宣言を探しているだけですfield value;。タイプチェックが行われていないように見えるため、セミコロンで分割してからスペースで分割するだけです。ソース コードの解析に興味がある場合は、文脈自由言語の解析、プッシュ ダウン オートマトン、および文脈自由文法について読んでください。

于 2012-12-27T22:34:27.687 に答える