Regex 包含gtksourceview空间的匹配存在问题?

Regex 包含gtksourceview空间的匹配存在问题?,regex,ada,gtksourceview,Regex,Ada,Gtksourceview,我正在努力改进gtksourceview中Ada的语法突出显示(目前,它已经非常过时并且非常不完整)。我遇到的一个问题是,Ada是非常位置的,所以匹配许多构造需要匹配这些位置。我可以很容易地在nano中实现这一点 所以,让我们考虑一个类型声明,例如: type Trit is range 0..2; 像“类型”、“是”和“范围”这样的关键词被识别(最初是)。然而,类型名被视为关键字(这是一个糟糕的设计决策,因为Ada经常定义新类型,即使是像整数这样的简单类型)。这样做的目的是,标准中的类型被着

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

所以,让我们考虑一个类型声明,例如:

type Trit is range 0..2;
像“类型”、“是”和“范围”这样的关键词被识别(最初是)。然而,类型名被视为关键字(这是一个糟糕的设计决策,因为Ada经常定义新类型,即使是像整数这样的简单类型)。这样做的目的是,标准中的类型被着色,而所有其他类型看起来都像普通文本,从而破坏了突出显示的目的。在某些语言中,这可能是一个值得注意的问题。但是,大多数类型名称出现在两个正则表达式模式之后:

type\s+(\w|\.|_)+
:\s+(\w|\.|_)+
这可能只是一个实现问题(nano和gtksourceview似乎使用不同的regex实现)。我认为问题在于识别空间。事实证明,将类型上下文置于关键字上下文之上会导致类型现在被高亮显示,但“type”关键字或“:”运算符随后不会正确高亮显示(它们被高亮显示为“type”)。我能够在nano中覆盖这一点,从而得到正确的高亮显示,但似乎无法了解gtksourceview是如何做到这一点的

在这里,您可以看到旧的gtksourceview定义正在运行,它不适用于具有许多自定义类型的文件。我的nano定义正在并排运行以供比较;按位置匹配是完全可能的,并且有效。

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

下面是当我将类型上下文置于关键字上下文之上时发生的情况。

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

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

(类型)\s+\w+

< />代码> 您可能想从

附录p中艾达的语法形式化描述中考虑<强>生成语法分析器>
不幸的是,这并不能回答您关于如何制定GtkSourceView语法的问题。

您能给我们一些关于输入+当前输出以及此代码+预期输出的示例吗?@vianna77 pictures upI知道附件p,这是我为nano创建模式的基础。这不是不知道语法/模式的问题,而是不知道gtksourceview的问题。