【问题标题】:What is the best way to define grammars for a text editor? [closed]为文本编辑器定义语法的最佳方法是什么? [关闭]
【发布时间】:2010-11-13 00:24:42
【问题描述】:

我正在为 Mac 编写一个开源文本编辑器,终于到了我想要添加语法突出显示的地步。在过去的几天里,我一直在反复讨论各种解决方案,最后我决定向更广泛的受众公开这个问题。

这是我看到的选项:

  • 基本上用一系列正则表达式模式匹配定义语言(类似于TextMate如何定义它的语言)
  • 使用正式语法(如 BNF 或 PEG)定义语言

使用正则表达式模式匹配似乎不太理想,因为它不能像正式语法一样正式地表示一种语言;然而,一些不太正式的语言将很难适应 BNF(即 Markdown——尽管我知道有一个很棒的 PEG implementation)。

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

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

【问题讨论】:

    标签: regex parsing grammar bnf peg


    【解决方案1】:

    除非你想打一场战斗,让你想要处理的每一种语言(或者更糟的是,每一种方言)的语法完全正确> 您要处理的语言...有多少种 C++?),出于语法高亮的目的,您可能最好放弃完全正确并接受有时您'会弄错的。在这种情况下,正则表达式似乎是一个非常好的答案。它们也可以非常快,因此不会干扰编辑人员。

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

    有时最好不要太认真。你能得到的 98% 的解决方案比永远不会实现的 100% 的解决方案要好。

    【讨论】:

      【解决方案2】:

      它可能不是你所需要的,因为你正在自己编写编辑器,但是有一个很棒的框架叫做 Xtext,它实际上会生成一个完整的编辑器,具有语法着色、可定制的大纲视图和自动完成等,基于适合您语言的语法:http://eclipse.org/Xtext

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2017-03-25
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        相关资源
        最近更新 更多