1

我正在努力改进 gtksourceview 中 Ada 的语法突出显示(目前,它非常过时且非常不完整)。我遇到的一个问题是,Ada 是非常定位的,因此匹配许多构造需要匹配这些位置。我能够很容易地在 nano 中做到这一点。

因此,让我们考虑一个类型声明,例如:

type Trit is range 0..2;

诸如“类型”、“是”和“范围”之类的关键字被识别(并且最初是)。但是,类型名称被视为关键字(这是一个糟糕的设计决策,因为 Ada 经常定义新类型,即使对于像整数这样的简单类型也是如此)。用途是标准中的类型被着色,所有其他类型看起来像普通文本,违背了突出显示的目的。在某些语言中,这可能是一个值得注意的问题。但是,大多数类型名称出现在两个正则表达式模式之后:

type\s+(\w|\.|_)+
:\s+(\w|\.|_)+

这可能只是实现的问题(nano 和 gtksourceview 似乎使用不同的正则表达式实现)。我认为问题在于识别空间。事实证明,将类型上下文放在关键字上下文之上会导致类型现在被突出显示,但是“type”关键字或“:”运算符没有正确突出显示(它们被突出显示为“type”)。我能够在 nano 中覆盖它,从而正确突出显示,但似乎无法找出 gtksourceview 是如何做到这一点的。

在这里,您可以看到旧的 gtksourceview 定义在起作用,它不适用于具有许多自定义类型的文件。我的纳米定义在旁边进行比较;按位置匹配绝对是可能的并且有效。 old-gtksourceview 定义与我的 nano 定义并排

当我将类型上下文放在关键字上下文下方时,会发生以下情况。 在此处输入图像描述

这是当我将类型上下文置于关键字上下文之上时发生的情况。 在此处输入图像描述

在这两种情况下,上下文都是相同的,只是一个简单的开始模式。

<context id="type" style-ref="type">
  <match>(type)\s+\w+</match>
</context>
4

1 回答 1

-1

您可能需要考虑根据语言参考手册附件 P 中 Ada 语法的正式描述生成解析器。

不幸的是,这并不能回答您关于如何为 GtkSourceView 制定语法的问题。

于 2015-02-18T09:24:09.920 回答