2

私は token_get_all() を使用して、php プロジェクトで静的分析を行っています。

次のようなもののスコープレベルを見つけるにはどうすればよいですか:

  • 現在の T_FUNCTION がまだ解析中の T_CLASS 内にあるかどうかを調べる
  • T_VARIABLE のスコープがすでに終了しているかどうかを知る

'{' と '}' 文字のカウントを保持する必要がありますか? それは安全な方法ですか?

4

2 に答える 2

2

これtoken_get_all()はまさにパッケージが言うことです: それはトークナイザーです。

これは、開き括弧と閉じ括弧を追跡することによって、スコープを自分で追跡する必要があることを意味します。私が考えることができる最も簡単な方法は、再帰降下パーサーを構築することです。

ところで、解析エラーはこの関数によって既に処理されています。

于 2012-10-03T09:02:46.190 に答える
1

パーサーを使用して構文ツリーを構築する方がよい場合があります。そうしないと、エッジ ケースが非常に複雑になります (PHP は、他の言語を組み込むことができる非常に扱いにくい言語です)。

簡単なグーグルが思いついた:PHP-Parser

構文ツリーを使用すると、関数または変数のスコープをより簡単に識別できますが、それでも分析が必要になります。

于 2012-10-03T09:01:24.113 に答える