我正在努力改进gtksourceview中Ada的语法突出显示(目前,它非常过时且非常不完整)。我有一个问题,Ada是非常位置的,所以匹配许多结构需要匹配这些位置。我可以很容易地在nano中做到这一点。
因此,让我们考虑一个类型声明,例如:
type Trit is range 0..2;像"type","is“和"range”这样的关键字被识别出来(最初也是这样)。但是,类型名称被视为关键字(这是一个糟糕的设计决策,因为Ada经常定义新类型,即使是整数这样的简单类型)。这样做得到的是,Standard中的类型被着色,而所有其他类型看起来像普通文本,这违背了突出显示的目的。在某些语言中,这可能是一个值得注意的问题。但是,大多数类型名称出现在两个正则表达式模式之后:
type\s+(\w|\.|_)+
:\s+(\w|\.|_)+这可能只是一个实现问题(nano和gtksourceview似乎使用不同的regex实现)。我以为问题出在识别空格上。事实证明,将类型上下文放在关键字上下文之上会导致类型现在突出显示,但" type“关键字或":”操作符不会正确突出显示(它们突出显示为"type")。我能够在nano中覆盖它,导致正确的突出显示,但似乎无法了解gtksourceview是如何做到这一点的。
在这里,您可以看到旧的gtksourceview定义的实际效果,它不适用于具有许多自定义类型的文件。我的nano定义在动作边上进行比较;通过位置匹配是绝对可能的,并且有效。

下面是当我将类型context放在关键字context下面时会发生的事情。

下面是当我将类型context放在关键字context之上时发生的事情。

在这两种情况下,上下文都是相同的,只是一个简单的入门模式。
<context id="type" style-ref="type">
<match>(type)\s+\w+</match>
</context>发布于 2015-02-18 17:24:10
您可能希望考虑使用生成解析器,该解析器来自Language Reference Manual附录P中对Ada语法的正式描述。
遗憾的是,这并没有回答您的问题,即如何制定GtkSourceView的语法。
https://stackoverflow.com/questions/28555414
复制相似问题