题:
我想要代码:语法高亮(编程语言)
语言:C#或汇编x86(最好是C#)
平台:
Windows
资格:最有效的实施/最专业/像微软这样的大公司这样做
重新说明:如何以目前已知的最有效方式在C#for Windows中实现语法高亮?
精心制作(随意跳过 – 不需要回答问题:)):
我不想任何实现它的方式 – 我已经看过几个.
我想知道的是微软在Visual Studio上如何做得很好(无论哪个版本).
在语法高亮方面,人们一直在努力重新发明轮子.我不明白为什么.
这被认为是一个非常难的问题吗?我已经看到只强调当前在屏幕上显示的内容的实现,我认为这是要走的路……(它使用了一些聪明的API来了解文本框的哪些行实际显示).
我也看过使用RichTextBox的实现,我认为这不是可行的方法(也许我错了) – 我认为像继承常规文本框上的文本并更改其画笔的例程可能会更好(也许我我已经看到了某个地方 – 我怀疑自己是否会想到这一点
另外我听说有些人用AST实现它就像编译器会被编码一样(lexer部分,我想?) – 我希望这有点过分 – 我不认为这是有效的. (没有受过教育的猜测)
如果这确实是一个难题,那么大军队如何才能做到正确呢?例如,我从未听说过在Visual Studio中打破语法高亮的方法.
但是实现它的任何其他工具都做得很糟糕,或者比大家伙更糟糕.
什么是官方的“这是最好的方式,而任何其他方式是效率低”的方式吗?
我真的没有任何证据证明微软的方式更好,但是看到他们可能比其他任何人更了解Windows API,我猜想实现它的方法是最好的(我希望是错的 – 想象一下可以说我的语法高亮实现比MS好!)
对于脱节的阐述感到抱歉.
我也提前为任何失礼道歉 – 这是我的第一个问题.
最佳答案 我认为没有“这是最好的方式而且其他任何方式效率都低”的方式.实际上,我认为效率不是主要问题.相当复杂.
一个好的语法高亮显示器基于一个好的解析器.只要您可以解析代码,您就可以以任何您喜欢的方式突出显示它的每个部分.但是,当代码格式不正确时会发生什么?很多语法高亮显示只是突出显示关键字和一些块结构来克服这个问题.通过这样做,他们可以使用简单的正则表达式,而不是具有完整的,语法错误容忍的解析器(这是Visual Studio所具有的).