Lyt*_*tol 3 regex grammar parsing bnf peg
我正在为Mac编写一个开源文本编辑器,并最终达到了我想要添加语法高亮的地步.过去几天我一直在寻找各种解决方案,最后我决定向更广泛的受众提出这个问题.
以下是我看到的选项:
使用正则表达式模式匹配似乎不太理想,因为它不能正式表示语言几乎和正式语法一样好; 然而,一些不太正式的语言将难以适应BNF(即Markdown - 尽管我知道有一个很好的PEG实现).
实时语法高亮显示的性能权衡是什么?多种语言的灵活性如何?
如果我走BNF路线,Todd Ditchendorf创建了令人敬畏的ParseKit框架,它可以很好地开箱即用.任何人都知道PEG的任何类似的东西?
除非你想要争取获得完全上下文免费(或者更糟糕的是,完整的上下文敏感)语法的战斗,这对于你想要处理的每种语言都是完全正确的(或者更糟糕的是,对于你想要处理的语言的每种方言而言 ......有多少种C++?),出于语法高亮的目的,你可能最好放弃完全正确并接受有时候你会弄错.在这种情况下,regexps似乎是一个非常好的答案.它们也可以非常快,因此它们不会干扰进行编辑的人.
如果你坚持做完整的语法检查/完成(我不认为你是),那么你将需要完整的语法.你也需要很长时间才能为真正的语言编写编辑器.
有时最好不要太严肃.您可以获得的98%解决方案优于从未实现的100%解决方案.