0

c++ソースに似た構文を持つ入力ファイルを解析したいと思います。ファイルには、次のようなコンポーネントが含まれます。

//It will have comments.
//It will be able to recursively open other files.
include OtherInputFile.txt
//It will resolve scope
ObjectName::MemberVariable = 0.0;
OtherObjectName
{
  MemberVariable1 = 1.0;
  MemberVariable2 = 2.0;
}

問題は、自分が何をしているのかわからないことです。私が必要としているのは、利用可能なテクノロジーやアルゴリズムに自分自身を向けるための構文解析に関する教科書の章だと思います。

4

2 に答える 2

3

パーサーを構築するためのツールはたくさんあります。

于 2012-04-03T22:50:49.780 に答える
0

C++ソースに似た構文の入力ファイルを解析したい

テンプレート、プリプロセッサ、演算子のオーバーロード、多重継承がないことを祈ってください。そうでなければあなたは困っています。

何をしているかが自分もわからない

Lex/Yaccを調査します。構文解析に関する本を読むか、主題をグーグルで検索します(「言語の作り方」)。これらのツールの一部には、チュートリアルとドキュメントのリンクがあります。「コンパイラの書き方」などと呼ばれる本に言及したbison、yacc、lexxのチュートリアルを見たと断言できますが、それはずっと前のことで、どのツールだったのか思い出せません。その本は何と呼ばれていましたか。

原則は基本的に同じです。言語文法を定義し(C ++標準の付録の1つに言語文法の例があります)、入力ファイルをトークンに分割し(トークンが文法と一致しない場合はエラーをスローします)、トークンを分類します(これは何ですか?ブラケット、識別子、関数名?)そしてそれらのトークンからツリーを構築し、対応する言語オブジェクト/関数呼び出しなどに変換します。言語の複雑さによっては、ほとんどの手順をスキップして、入力ファイルを使用して送信に取り組むことができます。 regexpsの束。

于 2012-04-03T22:50:24.150 に答える