当前位置: 首页 > wzjs >正文

宁波快速建站模板域名备案查询官网

宁波快速建站模板,域名备案查询官网,建立公司网站的目的,北京模板建站tree-sitter 的 grammar.js 编写方法 一、grammar.js 的作用是什么?二、基本结构三、关键词解释四、编写小技巧1. 起点是 source_file2. 所有规则名(如 identifier, number)都是 $ > ...3. 正则表达式用于定义词法规则(终结符&…

tree-sitter 的 grammar.js 编写方法

    • 一、`grammar.js` 的作用是什么?
    • 二、基本结构
    • 三、关键词解释
    • 四、编写小技巧
      • 1. 起点是 `source_file`
      • 2. 所有规则名(如 `identifier`, `number`)都是 `$ => ...`
      • 3. 正则表达式用于定义词法规则(终结符),例如:
    • 五、🍀 `$`的简单解释:`$` 是规则的“引用工具”
      • ❓ 那 `$` 到底能干嘛?
      • 🧠 举个例子来说明
    • 🔧 类比一下:

要掌握 tree-sittergrammar.js 编写方法,首先我们要理解 tree-sitter 的核心概念,它是一个 基于GLR算法的增量解析器生成工具,常用于语法高亮、代码分析等任务。

一、grammar.js 的作用是什么?

这是 tree-sitter 语法的定义文件,描述了一个语言的 词法规则(Lexing)语法规则(Parsing)


二、基本结构

grammar.js 是一个 CommonJS 模块,通常长这样:

module.exports = grammar({name: 'my_language', // 语言名称// 词法规则extras: $ => [/\s/, $.comment], // 忽略的内容,如空格、注释// 定义词法(token)rules: {source_file: $ => repeat($.statement),statement: $ => choice($.variable_declaration,$.function_call),variable_declaration: $ => seq('let',$.identifier,'=',$.expression,';'),function_call: $ => seq($.identifier,'(',optional($.expression),')',';'),expression: $ => choice($.number,$.string,$.identifier),identifier: $ => /[a-zA-Z_][a-zA-Z0-9_]*/,number: $ => /\d+/,string: $ => /"[^"]*"/,comment: $ => /\/\/.*/}
});

三、关键词解释

  • seq(...): 顺序匹配(sequence),表示一段连续的符号。
  • choice(...): 匹配多个可能之一(like OR)。
  • repeat(...): 重复0次或多次。
  • repeat1(...): 重复至少1次。
  • optional(...): 可选项。
  • token(...): 表示这是一个词法单元(token),不会再细分。
  • prec(n, rule): 设置优先级(n 越大,优先级越高)。

四、编写小技巧

1. 起点是 source_file

tree-sitter 会从你定义的 rules.source_file 开始解析整个文件。

2. 所有规则名(如 identifier, number)都是 $ => ...

这个 $ 是构造语法树时的“工具”,让你可以引用别的规则。

3. 正则表达式用于定义词法规则(终结符),例如:

identifier: $ => /[a-zA-Z_][a-zA-Z0-9_]*/,
number: $ => /\d+/,

五、🍀 $的简单解释:$ 是规则的“引用工具”

grammar.js 中,你写的每一个语法规则都是一个函数,比如这样:

identifier: $ => /[a-zA-Z_][a-zA-Z0-9_]*/

这里的 $ => 就是给 tree-sitter 传递一个函数,这个函数的参数 $ 是个“语法引用器”。

❓ 那 $ 到底能干嘛?

它能让你“引用其他规则”。

🧠 举个例子来说明

比如你想定义这样一个语句:

let x = 42;

你在写规则时会写成:

variable_declaration: $ => seq('let',$.identifier,'=',$.expression,';'
)

这里的 $.identifier$.expression 就是**“引用”之前定义的两个规则**。注意:

  • $.identifier -> 指向你之前写的 identifier: $ => ...
  • $.expression -> 指向你之前写的 expression: $ => ...

这样 tree-sitter 就能在 variable_declaration 这个规则里,使用别的规则了。


🔧 类比一下:

你可以把 rules 想象成一个对象:

rules = {identifier: ...,expression: ...,variable_declaration: ...
}

$.identifier 就相当于 rules.identifier

所以这个 $ 就是代表你整个 rules 对象本身。


http://www.dtcms.com/wzjs/174530.html

相关文章:

  • 网站建设原则五大原则东莞最新消息今天
  • 响应式布局原理是什么seo推广公司排名
  • 动态网站开发实训心得800seo如何优化图片
  • 郑州企业网站制作怎么做西藏自治区seo 标题 关键词优化
  • 商城网站需要多少钱优化大师免费下载安装
  • 电子商务网站开发代码百度上看了不健康的内容犯法吗
  • 赤峰做网站开发嘉定区整站seo十大排名
  • t想学网站建设近期重大新闻
  • 做网站时怎样申请域名昆山网站建设公司
  • 企业建立一个网站如何租用域名谷歌广告优化
  • 许昌网站优化app如何推广
  • 创造一个网页网络优化初学者难吗
  • 房屋建筑学课程设计图纸seo关键词排名软件
  • 泸州做网站的公司有哪些seo关键词优化哪个平台好
  • 山东做网站靠谱的公司肇庆百度快照优化
  • wordpress建站教程网网站seo整站优化
  • 临城企业做网站网络营销公司
  • 莱芜金点子传媒电子版长沙seo网络优化
  • 网站怎么做百度快照logo推广资源整合平台
  • dede做英文网站优化合肥网站建设优化
  • 哪里可以学习做网站成都高端网站建设哪家好
  • php做直播网站随州seo
  • 网站建设logo百度投广告怎么收费
  • 网站开发目录过多的缺点南宁百度推广代理公司
  • 网站建设要多钱软文营销案例文章
  • 深圳网络开发搜索引擎优化策略有哪些
  • 河南工程建设协会网站百度推广官网登录
  • 比较顺口的公司名字seo是什么职务
  • 番禺网站 建设信科网络百度软文推广公司
  • 容桂网站制作代理商网络推广推广培训