gpt4 book ai didi

parsing - 在哪里可以找到解析源代码并能够提取光标当前在代码中的范围的库?

转载 作者:行者123 更新时间:2023-12-03 13:34:46 26 4
gpt4 key购买 nike

在 SublimeText(2) 中,当您按下 [ctrl + shift + p] (mac osx) 时,您会看到插入符号/光标在给定时刻在源代码中的位置范围例如:entity.name.tag.inline.any.html meta.tag.inline.any.html text.html.basic

我很好奇用于解析文档/文件并创建该范围字符串的库或脚本。

旁注:在 Sublime 的控制台中键入 view.syntax_name(view.sel()[0].b) 也会输出作用域。

最佳答案

好吧,您所指的“库”只是语言语法

事实上,语言语法只是将文档语法划分为范围的规则集

换句话说,语法中的每条规则只是将一个或多个语法元素分配给一个范围。

w/r/t 实际的解析,对于 TextMate 和 Sublime Text,它是由正则表达式完成的/strong>.

例如,考虑python语言语法;如您所知,当我将光标放在 while 的开头并执行 ctrl-shift-P(显示范围)时,范围将出现在状态栏中:

source.python.keyword.control.flow.python

同样,这个作用域是在python语言语法中定义的,所以我们可以找到具体的规则:

{ 
match = '\b(elif|else|except|finally|for|if|try|while|with|break|continue|pass|raise|return|yield)\b';

name = 'keyword.control.flow.python';
}

第一项 match 只是传递给解析器的模式

第二项 name 只是为该特定语法元素指定的名称(即,范围)。

Sublime Text 2 将语言语法存储在 Packages 目录中,扩展名为 tmLanguage 作为 XML 而不是 JSON,因此上面的规则来自Python 语言语法在 ST2 中看起来像这样:

<dict>
<key>
match
</key>
<string>
\b(elif|else|except|finally|for|if|try|while|with|break|....[truncated]
</string>

<key>
name
</key>
<string>
keyword.control.flow.python
</string>
</dict>

所以语法中的每条规则都包装在一对dict标签中,每条规则的regexp模式包裹在字符串标签中;其相应的范围名称同上。

所有的语言语法都完全由这些规则组成——正是这种匹配/名称(或模式/范围)结构。

关于parsing - 在哪里可以找到解析源代码并能够提取光标当前在代码中的范围的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912622/

26 4 0
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com