私はパーサーを使用して、エディタで入力したコードのASTを取得しています。私が今達成したいのはこれです:エディタ(行、列)のカーソルの位置を考えて、現在選択されているAST要素を探します。しかし、私はこれをどのように行うことができるのか分かりません。これを解決するための標準的な方法はありますか?AST要素とカーソル位置を同期させるにはどうすればよいですか?
1
A
答えて
0
まず、各ASTノードにソースファイルの位置(行番号と列番号)をスタンプします。
第2に、表示されるソースファイルの行番号と列番号を抽象的に各ピクセルごとにマップします。 (実際には、表示された行が固定された高さで、表示された文字が固定されている場合は、表示行番号からソース行番号までのマップを使用して取得できます)。
ツリーを編集したり表示される部分を変更したりしても、画面の位置(カーソルの位置など)からASTノードへのマッピングが簡単になりました。
「ファイルの位置」がないため、新しいツリーノードをツリーに挿入すると、いくつかの問題が発生します。それは問題ありません。既存の行番号と重複しない任意の行/列番号を割り当てることができます。変更されたツリーをファイルに書き出す際には、実際に行番号/列番号は必要なくなり、無視することができます。
関連する問題
- 1. 2つのdivのスクロール位置を同期させるにはどうすればよいですか?
- 2. サイズ変更中にカーソルをコントロールポイントと同期させるにはどうすればよいですか?
- 3. スクロールされたdivの要素位置を計算するにはどうすればよいですか?
- 4. input要素をラベルと同じ行に配置するにはどうすればよいですか?
- 5. 視差要素の位置ずれを防止するにはどうすればよいですか?
- 6. 他の要素のように要素をスライドさせるにはどうすればいいですか?
- 7. 要素の正しい位置を取得するにはどうすればよいですか?
- 8. 他と同期する要素のスクロール位置を取得
- 9. 要素が負の位置に配置されているときにページを左にスクロールするにはどうすればよいですか?
- 10. 要素の現在の位置にピクセルを追加するにはどうすればよいですか?
- 11. ジョブを同期させるときはどうすればいいですか?
- 12. ASTに位置情報を付けるにはどうすればいいですか?
- 13. xamarinフォームで手動でエントリのカーソル位置を変更するにはどうすればよいですか?
- 14. 要素の位置計算を改善するにはどうすればよいですか?
- 15. DOM要素の位置オフセットを正しく取得するにはどうすればよいですか?
- 16. int []内の個々の要素位置を合計するにはどうすればよいですか?
- 17. キャンバス要素の位置を変更するにはどうすればよいですか?
- 18. コンソールアプリケーションでカーソルの位置を取得するにはどうすればよいですか?
- 19. 特定のcontenteditable divにキャレット/カーソルの位置を設定するにはどうすればよいですか?
- 20. フレックスボックスで2つの要素を同じ行に配置するにはどうすればよいですか?
- 21. std :: vectorの要素位置を見つけるにはどうすればよいですか?
- 22. GCDWebServerBodyReaderCompletionBlockを同期させるにはどうすればいいですか?
- 23. Firebaseデータベースコールを同期させるにはどうすればいいですか?
- 24. 現在の画面のカーソル位置を取得するにはどうすればよいですか?
- 25. 別の要素のカーソル位置に基づいて要素を回転する
- 26. 更新 - 非同期要求内で同期要求を行うにはどうすればいいですか
- 27. 可変数のPOST要求を同期させるにはどうすればよいですか?
- 28. カスタムフルスクリーンでスクロール位置がリセットされないようにするにはどうすればよいですか?
- 29. この位置にcalc()関数を使用する場合、Javascriptで要素の位置を設定するにはどうすればよいですか?
- 30. HTML入力要素内でカーソル/キャレットの位置を取得するにはどうすればよいですか?
ASTを作成した後でも、各ASTノードにソースファイルの位置をスタンプするにはどうすればよいですか? – user2035039
おそらくできません。作成されたノードをスタンプできないのはなぜですか? –
パーサをそのまま使用することを考えていましたが、変更する必要があるようです。 – user2035039