最高效和专业的方式

题:
我想要代码:语法高亮(编程语言的)
语言:C#或程序集x86(最好是C#)
平台:Windows
资格:最有效的实施可能/最专业/像微软这样的大公司这样做
转载请注明:我如何以最有效的方式在C#for Windows中实现语法突出显示?


详细说明(随意跳过 - 不需要回答问题:)):
我不想要任何方式来实现它 - 我已经看到了几个。
我想知道的是Microsoft如何在Visual Studio上做得如此出色(无论哪种版本)。

谈到语法高亮时,人们一直试图重新发明轮子。 我不明白为什么。
这被认为是一个非常难的问题? 我已经看到只会突出显示屏幕上显示的内容的实现,我认为这是要走的路...(它使用了一些聪明的API来知道文本框的哪些行实际显示)。
我也看到使用RichTextBox的实现,我认为这不是要走的路(也许我在这里错了) - 我认为像在常规文本框上绘制文本并更改其画笔的子程序的子类可能会更好(也许我我曾经见过这个地方 - 我怀疑我自己会这样想)
另外我听说有人用AST来实现它,就像编译器会被编码一样(我认为是词法分析器的一部分) - 我希望这太过于夸张 - 我不认为它是高效的。 (未受教育的猜测)

如果这确实是一个难题,那么大队总是如何做到这一点? 例如,我从来没有听说过在Visual Studio中突破语法突出显示的方法。
但是实现它的任何其他工具的效果都很差,或者比大个子差。
官方的说法是“这是最好的方式,其他方式效率较低”的方式呢?

我确实没有任何证据表明微软的方式更好,但是由于他们对Windows API的了解可能比其他任何人都要多,所以我猜想实现它的方式是最好的(我想错了 - 想象一下能够说我的语法高亮实现比MS好!)

对不起的阐述感到抱歉。
另外,我还提前为任何假人道歉 - 这是我的第一个问题。


我不认为有这样做“这是最好的方式,任何其他方式效率较低”。 事实上,我不认为效率是主要问题。 相当复杂。 一个好的语法高亮器基于一个好的解析器。 只要你能解析代码,你可以用你喜欢的任何方式来突出它的每一部分。 但是,当代码格式不正确时会发生什么? 许多语法突出显示器只是突出显示关键字和一些块结构来克服此问题。 通过这样做,他们可以使用简单的正则表达式,而不是具有完整的,语法容错解析器(这是Visual Studio的功能)。


最好的方法可能是重用现有的东西,比如ScintillaNET。


与任何代码一样....很少有一种“最好”的方式。 做事有多种方式,每种方式都有好处和缺点。

也就是说,某种形式的解释模式可能是最常见的方式。 根据GoF书:

解释器模式广泛用于使用面向对象语言实现的编译器,就像Smalltalk编译器一样。 SPECTalk使用该模式来解释输入文件格式的描述。 QOCA约束解决工具包使用它来评估约束条件。

它还会继续讨论适用性部分中的限制

  • 语法很简单。 对于复杂的语法,语法的类层次变得很大且不可管理。 在这种情况下,解析器生成器等工具是更好的选择
  • 效率不是关键问题。 最有效的解释器通常不是通过直接解析解析树来实现的,而是首先将它们翻译成另一种形式。 例如,正则表达式通常转换为状态机。 但即使如此,译员可以通过解释器模式来实现,所以模式仍然适用。
  • 了解这一点,您现在应该知道为什么在与之进行多次匹配之前先预编译可重用的RegEx更好。 如果你不这样做,那么每次都必须执行两个步骤(转换,解释),而不是一次构建状态机,并将其有效地应用几次。

    特别是对于您所描述的解释类型,Microsoft将Microsoft.VisualStudio命名空间及其所有强大的功能作为Visual Studio SDK的一部分公开。 您还可以查看System.CodeDOM以进行动态代码生成和编译。

    链接地址: http://www.djcxy.com/p/47097.html

    上一篇: most efficient and professional way

    下一篇: Change Emacs syntax highlighting colors