私は token_get_all() を使用して、php プロジェクトで静的分析を行っています。
次のようなもののスコープレベルを見つけるにはどうすればよいですか:
- 現在の T_FUNCTION がまだ解析中の T_CLASS 内にあるかどうかを調べる
- T_VARIABLE のスコープがすでに終了しているかどうかを知る
'{' と '}' 文字のカウントを保持する必要がありますか? それは安全な方法ですか?
これtoken_get_all()
はまさにパッケージが言うことです: それはトークナイザーです。
これは、開き括弧と閉じ括弧を追跡することによって、スコープを自分で追跡する必要があることを意味します。私が考えることができる最も簡単な方法は、再帰降下パーサーを構築することです。
ところで、解析エラーはこの関数によって既に処理されています。
パーサーを使用して構文ツリーを構築する方がよい場合があります。そうしないと、エッジ ケースが非常に複雑になります (PHP は、他の言語を組み込むことができる非常に扱いにくい言語です)。
簡単なグーグルが思いついた:PHP-Parser
構文ツリーを使用すると、関数または変数のスコープをより簡単に識別できますが、それでも分析が必要になります。