我正在为 Mac 编写一个开源文本编辑器,终于达到了我想要添加语法高亮的地步。在过去的几天里,我一直在反复讨论各种解决方案,最后我决定向更广泛的受众开放这个问题。
以下是我看到的选项:
- 基本上用一系列正则表达式模式匹配来定义语言(类似于 TextMate 定义其语言的方式)
- 使用BNF 或 PEG 等形式语法定义语言
使用正则表达式模式匹配似乎不太理想,因为它不能像正式语法一样正式地表示一种语言;然而,一些不太正式的语言将很难适应 BNF(即 Markdown——尽管我知道有一个很棒的PEG 实现)。
实时语法突出显示的性能权衡是什么?多种语言的灵活性如何?
如果我走 BNF 路线,Todd Ditchendorf 创建了很棒的ParseKit框架,它可以很好地开箱即用。有人知道PEG有什么类似的吗?