gpt4 book ai didi

sublimetext2 - 匹配 TextMate/Sublime Text/Atom 语言语法中的嵌套结构

转载 作者:行者123 更新时间:2023-12-01 15:47:47 24 4
gpt4 key购买 nike

在为用 Racket 语言编写的语法高亮程序编写 Github 语法时,我偶然发现了一个问题。

在 Racket 中,#| 开始多行注释,|# 结束它。

问题是多行注释可以嵌套:

  #| a comment  #| still a comment |# even 
more comment |#

这是我的无效尝试:

repository:
multilinecomment:
begin: \#\|
end: \|\#
name: comment
contentName: comment
patterns:
- include: "#multilinecomment"
name: comment
- match: ([^\|]|\|(?=[^#]))*
name: comment

匹配模式的目的是:

  1. “#multilinecomment” 多行注释可以包含另一个多行注释。
  2. ([^\|]|\|(?=[^#]))*子表达式的含义:

     [^\|]        any characters not an `|`
    \|(?=[^#]) an `|` followed by a non-`#`

因此整个表达式匹配一个不包含 |# 的字符串

更新:

在 TextMate 邮件列表上得到了 Allan Odgaard 的答复:

http://textmate.1073791.n5.nabble.com/TextMate-grammars-and-nested-multiline-comments-td28743.html

最佳答案

所以我在 Sublime 中测试了一堆具有多行注释的语言(C/C++、Java、HTML、PHP、JavaScript),并且没有一种语言语法支持嵌入多行注释的多行注释——语法高亮comment 范围以第一个“comment close”标记结束,而不是以对称标记结束。现在,这并不是说这是不可能的,因为 BracketHighlighter插件非常适合匹配对称标签、括号和其他标记。然而,它是用 Python 编写的,并为其匹配算法使用自定义逻辑,这在为 Sublime 的语法高亮器提供支持的 Oniguruma 引擎中可能不可用,显然 Github's

基本上,根据您对问题的描述,您需要一个代码解析器来确保嵌套注释是合法的,而仅靠语法高亮定义无法做到这一点。如果你只是为了 Sublime 写这篇文章,一个自定义插件可以解决这个问题,但我对 Github 的 Linguist 语法高亮系统了解不多,无法判断你是否被允许这样做。我还不是正则表达式大师,但在我看来,纯粹通过正则表达式实现这一点相当困难,因为您需要以某种方式跟踪任意数量的内部对称“打开”和“关闭”在找到(并识别!)最后一个标记之前标记。

抱歉,除了我不确定这是可能的之外,我无法提供明确的答案,但这是我在不了解 Sublime 和 Github 的内部结构的情况下所能想到的最好的答案,这是(至少在 Sublime 的情况下)除非开源,否则不会发生。祝你好运!

关于sublimetext2 - 匹配 TextMate/Sublime Text/Atom 语言语法中的嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com