2016-05-19 7 views
1

私はパーサーを使用して、エディタで入力したコードのASTを取得しています。私が今達成したいのはこれです:エディタ(行、列)のカーソルの位置を考えて、現在選択されているAST要素を探します。しかし、私はこれをどのように行うことができるのか分かりません。これを解決するための標準的な方法はありますか?AST要素とカーソル位置を同期させるにはどうすればよいですか?

答えて

0

まず、各ASTノードにソースファイルの位置(行番号と列番号)をスタンプします。

第2に、表示されるソースファイルの行番号と列番号を抽象的に各ピクセルごとにマップします。 (実際には、表示された行が固定された高さで、表示された文字が固定されている場合は、表示行番号からソース行番号までのマップを使用して取得できます)。

ツリーを編集したり表示される部分を変更したりしても、画面の位置(カーソルの位置など)からASTノードへのマッピングが簡単になりました。

「ファイルの位置」がないため、新しいツリーノードをツリーに挿入すると、いくつかの問題が発生します。それは問題ありません。既存の行番号と重複しない任意の行/列番号を割り当てることができます。変更されたツリーをファイルに書き出す際には、実際に行番号/列番号は必要なくなり、無視することができます。

+0

ASTを作成した後でも、各ASTノードにソースファイルの位置をスタンプするにはどうすればよいですか? – user2035039

+0

おそらくできません。作成されたノードをスタンプできないのはなぜですか? –

+0

パーサをそのまま使用することを考えていましたが、変更する必要があるようです。 – user2035039

関連する問題