我是在受虐狂的MAC编写开源文本编辑器,终于达到了我要添加语法突出显示的地步。在过去的几天里,我一直在各种解决方案中来回走动,终于决定向更广泛的受众开放这个问题。

这是我看到的选项:

  • 基本上定义语言 正则图案匹配 (类似于文本男友的定义语言)
  • 用A定义语言 正式语法 像BNF或PEG

使用Regex模式匹配似乎并不理想,因为它不能正式地代表一种语言和正式语法。但是,一些不太正式的语言将很难适应BNF(即Markdown - 尽管我知道有一个很棒的 PEG实施).

实时语法突出显示的性能权衡是什么?多种语言的灵活性如何?

如果我走BNF路线,Todd Ditchendorf创建了很棒的 parsekit 框架可以很好地开箱即用。有人知道PEG有什么类似的东西吗?

有帮助吗?

解决方案

除非您想与获得全文免费(或更糟糕的是,完整的上下文敏感)语法完全正确的战斗完全正确 方言 您要处理的语言...有多少种C ++?) 语法突出显示 您可能最好放弃完全正确的性,并接受有时会弄错的。在这种情况下,Regexps似乎是一个非常好的答案。它们也可以非常快,因此他们不会干扰进行编辑的人。

如果您坚持执行完整的语法检查/完成(我认为您不是),那么您将需要完整的语法。您也将很长一段时间为真实语言制作编辑。

有时最好不要太认真。您可以获得的98%解决方案比从未实现的100%解决方案更好。

其他提示

由于您亲自编写编辑器,因此可能并不是您所需要的,但是有一个名为Xtext的很棒的框架,实际上将生成一个具有语法着色,可自定义的轮廓视图和自动完成等的完整编辑器,基于语法,你的语言: http://eclipse.org/xtext

除了使语法用于语言工作的问题外,还具有使其用于编辑中间的代码工作的额外复杂性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top