我正在创建一种简单的后缀编程语言。语法如下:
2 3 add
将两个整数2
相加3
。"hello, world!" puts
将字符串放入"hello, world!"
STDOUT。
可以使用的新功能的定义如下:
"fourth_pow"
"This function raises the argument on the top of the stack to the fourth power."
[
dup dup dup mul mul mul
]
def
空格和换行符在语言语法中并不重要。这意味着上面的定义也可以被定义为"fourth_pow" "..." [ dup dup dup mul mul mul] def
(但当然,这不太可读)。
我现在想突出显示这种语言的语法,以便在上面的定义语句def
中突出显示新定义的函数名和关键字。
文件中的一个片段.tmLanguage
(YAML 格式)是:
definition:
name: "entity.other.function.jux-beta_syntax"
begin: ("([a-zA-Z_][\w]*[?!]?)")
end: (def)
beginCaptures:
'1': {name: "entity.name.function.jux-beta_syntax"}
contentName: "support.constant.jux-beta_syntax"
patterns:
- include: '#comment'
- include: '#quotation_start'
- include: '#quotation_end'
- include: '#string'
- include: '#identifier'
- include: '#integer'
(在此处查看整个文件)
这“有效”,但这意味着当我在文件末尾开始一个新字符串时,它会突出显示,就好像它是一个函数定义一样。这是因为规则的“开始”部分#definition
匹配。但我想要发生的是,只有在比赛可以结束的情况下才给它上色。
有没有办法使用 tmLanguage 格式来做到这一点?