2010-11-13 63 views
3

我爲自己寫了一個Mac開源文本編輯器,並最終達到了我想添加語法高亮的地步。過去幾天我一直在回顧各種解決方案,最後我決定向更廣泛的受衆開放這個問題。什麼是爲文本編輯器定義文法的最佳方式?

下面是我看到的選項:

  • 定義語言基本匹配(類似於TextMate中如何定義它的語言)
  • 定義語言與形式文法像一系列正則表達式模式BNF或PEG

使用正則表達式模式匹配似乎不太理想,因爲它不能正式表示一種語言幾乎和af一樣形式語法;然而,一些不太正式的語言將難以適應BNF(即減價 - 雖然我知道有很好的PEG implementation)。

現場語法突出顯示的性能權衡是什麼?對於各種語言的靈活性如何?

如果我去BNF路線,託德Ditchendorf創建了很棒的ParseKit框架,可以很好地開箱即用。任何人都知道任何類似的PEG的?

回答

7

除非你想打贏一個完全正確的自由(或更糟糕的是,一個完整的上下文敏感)語法的戰鬥完全正確的每一種語言你想處理(或更糟糕的是,每一個方言要處理的語言 ...如何C++中有幾種?),爲語法的目的,凸顯你可能會更好捷威完全正確,並接受有時你會錯誤的。在這種情況下,正則表達式似乎是一個非常好的答案。它們也可以非常快速,所以它們不會干擾編輯人員。

如果你堅持做完整的語法檢查/結束(我不認爲你是),那麼你就需要,充分語法。在爲真正的語言製作編輯器方面,你也會很長時間。

有時候最好不要太認真。 98%的解決方案比不上100%的解決方案要好得多。

+0

謝謝。理性思維盛行... – Lytol 2010-11-13 17:41:00

3

它可能不是正是你需要的,因爲你是你自己寫的編輯器,但有一個叫做的Xtext真棒框架,將實際生成語法着色,可定製的大綱視圖和自動完成等一個完整的編輯器,基於對你的語言的文法:http://eclipse.org/Xtext

0

除了得到一個語法的語言工作的問題,也試圖得到它的代碼是在被編輯的工作中增加了複雜性。

+0

是的,這是我的核心問題。除了形式語法的複雜性之外,他們在語言的部分塊上的工作能力如何(對於大多數語言來說不是很有效) - 這就是人們如何降低實時語法高亮的開銷。 – Lytol 2010-11-18 17:18:20

+0

人們已經構建了語法驅動的文本編輯器。首先,你需要很多機器在頂部/集成到普通的解析器來完成這項工作。然後,讓編輯隨意編輯「在代碼中間」不僅是最困難的部分,而且如果你弄錯了,它會立即被拒絕。 – 2014-05-30 11:41:10

相關問題