C++で書かれたソフトウェア(openFOAM)の言語の種類を見ていると、あることに気がつきました。それは次のようなものでした。
field value;
例えば、
temperature 25;
これがどのように機能するのだろうか。等号を使用せずに温度を25に設定する方法を意味します。何か案が?
openFOAM にはそのフォーマットを理解するパーサーがあるからです。
このようなパーサーを作成するのは難しくありません。C++ (yacc や bison などのパーサー生成ツールを使用) は、非常に高速であるため、パーサーとしてよく使用されます。
C++ はチューリング完全言語であるため、他の言語でできることは何でもできます。具体的には、C++ コードのように見えないデータを処理できます。
プログラミング言語は通常、コンテキストフリーです。言語が文脈に依存しない場合は、解析できます (些細なこととは言いませんが、以前に何度も解決された問題であり、コンパイラ クラスを使用する場合は、単純な言語に対してそれを行う必要があります)。
パーサーは、 format の宣言を探しているだけですfield value;
。タイプチェックが行われていないように見えるため、セミコロンで分割してからスペースで分割するだけです。ソース コードの解析に興味がある場合は、文脈自由言語の解析、プッシュ ダウン オートマトン、および文脈自由文法について読んでください。