2012-03-22 11 views
0

私のコンパイラ用の解析ツリーがあります。私の解析ツリーのどのトラバーサルが私のソースコードが世代テストされたのと同じ順序になるのだろうかと思っていましたツリーの走査によって正しい結果が得られます

私はそれが先行予約であるべきだと思いますが、それは順序通りであると言われています。

また、パーザで、識別子の宣言が何時行われたかを知りたい場合は、どのような順番のものよりも、(非終端記号declarationにはその生産があります)予約注文?

+0

"私のソースコードが世代のためにテストされた同じ順序"を翻訳してください。 – EJP

答えて

0

インオーダートラバーサルが必要です。 this ASTでインオーダートラバーサルを行うと、ソースに書かれた順序でコンストラクトを訪問しています。また

、私がいたとき、私のパーサで、識別子の一部 宣言が行われたことを知りたい場合は、私が選ぶものトラバーサルのどのような順序よりも(非終端宣言はそのための 生産を持っていると言います)。 予約注文?

シンボルが宣言されている位置(行、文字、または列番号)を検索することを指している場合、その情報は識別子とともに格納されているはずですASTノードをツリーに挿入したときに表示されます。ほとんどのパーサーは、あるトークンに一致するとその情報を追跡します。

ただし、必要なときにツリーをトラバースする代わりに、シンボルテーブルエントリとともにロケーション情報を格納する方が効率的です。

1

それを明確に、あなたが何かパース取得する:

x = a + b 

を先行順は以下のとおりです。

(=, (+, a, b)) 

とINORDERは

(x, =, (a, +, b)) 

右ですか?

"私のソースコードが世代のためにテストされたのと同じ順序"とは何を意味するのか分かりませんが、実際にあなたの式のinorderを尋ねると思います。

0

属性を継承している場合は、インオーダートラバーサルが必要な場合があります。

あなたは

int型解析したいと。

この宣言の生成規則は

なステートメントである - >タイプID。
タイプ - > int |浮く ;

このように、Type(intまたはfloat)をid(これらの場合はa)に渡す必要があります。この情報の受け渡しは、インオーダートラバーサルによって行うことができます。

関連する問題