我正在为gtksourceview中的Ada改进语法突出显示(目前,它已经过时且非常不完整)。我遇到的一个问题是,Ada非常有位置,所以匹配许多结构需要匹配这些位置。我很容易在nano中做到这一点。
所以,让我们考虑一个类型声明,例如:
type Trit is range 0..2;
像“type”,“is”和“range”这样的关键字被识别(并且最初是)。但是,类型名称被视为关键字(一个糟糕的设计决策,因为Ada经常定义新类型,即使对于像整数这样的简单类型)。使用的是,标准中的类型是彩色的,所有其他类型看起来像普通文本,从而破坏了突出显示的目的。在某些语言中,这可能是一个值得注意的问题。但是,大多数类型名称出现在两个正则表达式模式之后:
type\s+(\w|\.|_)+
:\s+(\w|\.|_)+
这可能只是一个实现问题(nano和gtksourceview似乎使用不同的正则表达式实现)。我认为问题在于识别空间。事实证明,将类型上下文放在关键字上下文上会导致现在突出显示类型,但“type”关键字或“:”运算符不会正确突出显示(它们会突出显示为“type”)。我能够在nano中覆盖它,导致正确的突出显示,但似乎无法找出gtksourceview如何做到这一点。
在这里,您可以看到旧的gtksourceview定义在运行中,这对于具有许多自定义类型的文件不起作用。我的纳米定义在行动方面用于比较;按位置匹配肯定是可能的并且有效。
当我将类型上下文放在关键字上下文下面时会发生什么。
当我将类型上下文放在关键字上下文之上时会发生什么。
在这两种情况下,上下文都是相同的,只是一个简单的入门模式。
<context id="type" style-ref="type">
<match>(type)\s+\w+</match>
</context>
答案 0 :(得分:0)
您可能需要从Language Reference Manual的附录P中的Ada语法的正式描述中考虑生成解析器。
不幸的是,这并没有回答你如何来制定GtkSourceView语法的问题。