日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ide打开项目运行和调试按钮都是灰色的_如何开发一个IDE

發布時間:2024/8/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ide打开项目运行和调试按钮都是灰色的_如何开发一个IDE 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IDE對于語言來說非常重要,讓新手能更快入門,讓老手能有更高的開發效率。所以我摸索著開發了Fanx語言的IDE。這里分享一些IDE內部工作原理和經驗。

IDE和編譯器

IDE為了實現功能,需要對源碼進行解析。經過詞法分析、語法分析、語義分析。相當于編譯器的前端,相對與編譯器來說少了優化器和代碼生成等階段。

  • 語法分析:把字符串源文件變成單詞串,每個單詞叫做token。
  • 語法分析:由token串構建AST(抽象語法樹)
  • 語義分析:決定AST每個結點的類型和相關信息,并進行類型檢查。
  • IDE的語法解析和編譯器理論上能共享代碼。但是大部分語言編譯器在開發時都沒有考慮IDE的需求。兩者功能上還有一定差異的:

  • 錯誤恢復。編譯器在遇見錯誤的時候可以直接退出。但是IDE不行,需要記錄錯誤,并試圖恢復后繼續解析。在代碼殘缺不全的情況下也要進行語義分析。
  • 多階段編譯。編譯器可以把詞法分析、語法分析、語義分析一遍全做了。但是IDE考慮到不能阻塞UI線程,需要分開多層。
  • 增量編譯。編譯器可以把整個項目全部編譯一遍。IDE中的文本一直在持續修改,需要增量的編譯修改的部分。
  • IDE一般和編譯器是獨立的軟件。當點擊工具欄編譯或者運行按鈕的時候,IDE啟動外部編譯器進程進行編譯。如果編譯器和IDE版本不匹配,可能出現IDE顯示有錯誤,但是編譯是成功的。

    編輯器

    我們首先需要一個文本框來編輯代碼,但是GUI框架提供的控件(例如TextArea)可能并不滿足自定義顏色的要求。我們可以自己畫一個控件,這樣可以自定義排版和著色。

    比較麻煩的地方是需要自己處理鍵盤事件,處理打字和光標操作等。還有拷貝和粘貼操作要訪問系統剪貼板。中文輸入法支持可以用一個隱藏的TextField來實現。這些功能開發完成后,我們就自己造了一個TextArea的輪子出來。

    語法高亮

    我們只需要完成詞法分析,就能完成基本的語法高亮了。如果想要更高級的語義語法高亮,則需要等到完成語法分析或者語義分析。

    語法分析和語法分析比較慢,在后臺線程進行。詞法分析比較快,在UI線程中處理。鍵盤事件中同步進行詞法分析,后臺線程的語義分析則是基于源碼文本的快照。

    語義錯誤

    語義分析不只是當前文件的事情,還涉及依賴的庫和項目內的其他文件。所以我們需要針對整個項目進行分析。最后把錯誤信息顯出出來。

    由于語義分析是整個項目進行的,所以成本比較高。我們在文件被修改的時候進行增量編譯,只編譯分析當前文件。當然增量編譯的前提是項目首次加載時要進行一次全量編譯。如果再進一步優化可以只分析文本被修改的部分所在的函數。

    跳轉到定義

    按ctrl鍵并鼠標點擊符號,跳轉到符號的定義。我們在構建抽象語法樹的時候一直維護結點所在的文本位置。根據點擊位置查詢抽象語法樹得到點擊的結點。點擊的位置可能為類名,變量名,函數等,根據不同類型跳到不同的文件位置。在語義分析后我們就已經有了符號之間的引用信息。

    補全提示

    或者叫做自動完成。當用戶鍵入時提示輸入建議,并顯示對應API文檔。我們仍然和跳轉定義的實現一樣查詢當前光標位置的抽象語法樹結點,然后根據結點類型分不同情況做提示。例如用戶在一個變量后面輸入了“.”, 我們把這個變量在語義分析中確定的類型對應的所有方法列出來,作為候選。

    需要把所有的第三方庫和其他文件的符號索引在一起,供自動完成來查詢。有時為了快速查詢可以把符號建成倒排索引或者Trie樹索引。很多腳本語言IDE實現會把這些索引持久保存,但我們為了簡單,不進行持久化,每次啟動時在后臺線程建立索引。當文件保存時觸發索引的更新。

    調試

    這個依賴與JVM提供的調試協議和接口。運行程序時提供調試模式的參數,則JVM啟動后監聽指定端口,并暫停程序,等待調試客戶端命令。調試客戶端在指定端口中連接被調試進程,并發出相關調試命令。他們通過socket來通信,所以遠程調試是可能的。

    總結

    這里說的都是針對單個語言的基本功能。從頭開發完整的IDE的工作量非常大,架構的復雜度也很大。

    總結

    以上是生活随笔為你收集整理的ide打开项目运行和调试按钮都是灰色的_如何开发一个IDE的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。