代码之家  ›  专栏  ›  技术社区  ›  Lytol

为文本编辑器定义语法的最佳方法是什么?

  •  3
  • Lytol  · 技术社区  · 15 年前

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

    以下是我看到的选项:

    • 基本上用一系列 正则表达式模式匹配 (类似于TextMate定义其语言的方式)
    • 形式语法 像BNF或PEG

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

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

    如果我走BNF路线,托德·迪恩多夫创造了 ParseKit 框架可以很好的开箱即用。有人知道佩格有什么类似的吗?

    3 回复  |  直到 15 年前
        1
  •  7
  •   Ira Baxter    15 年前

    除非你想为你想处理的每一种语言(或者更糟的是,为每一种语言)争取一个完全无上下文(或者更糟的是,完全上下文敏感的)语法 方言 你想处理的语言。。。C++有多少种?,目的是 语法突出显示 你最好放弃完全正确的观点,承认有时你会犯错。在这种情况下,regexp看起来是一个非常好的答案。它们也可以非常快,所以不会干扰编辑人员。

    如果你坚持做完整的语法检查/完成(我不认为你是),那么你需要完整的语法。您还需要很长时间才能为真正的语言生成编辑器。

    有时候最好不要太严肃。一个98%的解决方案,你可以得到比一个100%的解决方案,从来没有实现。

        2
  •  3
  •   Fabian Steeg    15 年前

    这可能不是你所需要的,因为你是自己编写的编辑器,但有一个很棒的框架称为Xtext,它将实际生成一个完整的编辑器,具有语法着色、可自定义的大纲视图和自动完成等功能,基于你的语言语法: http://eclipse.org/Xtext

        3
  •  0
  •   BCS    15 年前

    除了让语法为语言工作的问题外,还有一个复杂的问题,就是试图让它在被编辑的代码中工作。