2012-04-03 12 views
0

C++ソースに似た構文を持つ入力ファイルを解析したいと思います。ファイルには次のようなコンポーネントが含まれます: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; 
} 

問題は、私が何をしているのかわかりません。私は必要なのは、どのような技術やアルゴリズムが利用できるかを知るための解析に関するテキストブックの章です。

+0

あなたは、私は構文はC++よりも、実質的に単純であることを願ってのDFA –

+5

を調べる必要があります。さもなければ、あなたは何年もの価値があります。 –

+1

うわー!あなたが物事を解析するのに慣れていないならば、C++は厄介な行です。 – Hoons

答えて

0

は私が

テンプレート、プリプロセッサ、オペレータのオーバーロードおよび多重継承を持っていないことを祈ってC++ソースに似た構文は、入力ファイルを解析します。それ以外の場合、あなたは困っています。

私は

レックス/ Yaccのを調査をやっている見当がつかない。構文解析やGoogleの主題についての本を読んでください(「言語の作り方」)。これらのツールの一部には、チュートリアルとドキュメントのリンクがあります。私はバイソン、yacc、lexxのチュートリアルを見て、 "コンパイラの書き方"などと書かれた本を読んだことを誓ってもらえましたが、それはずっと前のことでした。その本は何と呼ばれたのですか?

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

+0

複数の継承を解析するのは簡単です。正確かつ効率的に実装するのは難しい –