我正在尝试编写dg编程语言的语法文件。这不是很复杂,它是从Python派生的,所以我从Python语法文件中复制。Vim语法文件 - 函数名称末尾的引号[dg编程语言]
的问题是,函数名可以在最后一个单引号:从报价开始,该行突出显示为一个字符串
a = list' 1 2 3 # [1, 2, 3]
明显。 字符串的定义,这是我从Python语法文件中提取,是这样的:
syn region dgString start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\="""+ end=+"""+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\='''+ end=+'''+ keepend contains=dgEscape,dgEscapeError
syn match dgEscape +\\[abfnrtv'"\\]+ display contained
syn match dgEscape "\\\o\o\=\o\=" display contained
syn match dgEscapeError "\\\o\{,2}[89]" display contained
syn match dgEscape "\\x\x\{2}" display contained
syn match dgEscapeError "\\x\x\=\X" display contained
syn match dgEscape "\\$"
我想有在没有突出显示函数名结束(普通文本)的报价。我怎样才能做到这一点?
参考:
在文档中,它说函数名称可以包含引号字符?我怎么知道'rb''是一个原始的二进制字符串的开始,而不是一个函数名?我认为重要的是确保单引号是描述函数名称的语法元素的一部分;那么你将不必修改字符串的定义。 – benjifisher
其实它没有说出来。但是,如果你快速搜索教程,你可以看到'tuple'','list''和'dict''被使用。我也尝试在repl中定义一个带有引号的函数,它起作用。至于你的第二个问题,可以证明'rb''不是一个有效的函数名(既不是'b''也不是'r''),而其他组合(如'rib'= - > 2')是。 – rubik