新闻详情

新闻详情

首页 / 资讯中心 / 详情

prism4cj语法继承进阶:extendGrammar、insertBeforeToken与TokenFilter三大技巧全解析

发布时间:2026/11/15 6:52:54来源:尧图网络
prism4cj语法继承进阶:extendGrammar、insertBeforeToken与TokenFilter三大技巧全解析
prism4cj语法继承进阶extendGrammar、insertBeforeToken与TokenFilter三大技巧全解析【免费下载链接】prism4cj一个轻量的语法高亮库项目地址: https://gitcode.com/Cangjie-TPC/prism4cjprism4cj 是一个用仓颉语言实现的轻量级语法高亮库内置 26 种语言的高亮规则。当你想为项目添加新语言支持时不需要从零写规则——通过语法继承只需几行代码就能站在巨人肩膀上。本文带你完整解析三大进阶技巧extendGrammar 继承覆盖、insertBeforeToken 精准插入、TokenFilter 过滤继承帮你快速定制属于自己的语法高亮方案。为什么需要语法继承prism4cj 的高亮规则由Grammar语法对象组成每个 Grammar 包含一组Token标记如keyword、string、comment。仔细观察 src/languages/ 目录下的语言文件你会发现一个规律C、C#、Dart、Go、Groovy、Java、JavaScript、Kotlin、仓颉语言全都继承自clikeC 类语言通用规则Cpp 继承cRust 再继承cppScala 继承javaMarkdown 继承markup这种基类语法 → 派生语法的设计避免了大量重复规则子语言只写自己特有的部分其余能力注释、函数名、基础符号等自动继承。技巧一extendGrammar 继承并覆盖同名标记 一句话理解克隆父语法替换你关心的部分extendGrammar定义在语法工具类中见 grammar_utils.cj。它的工作方式克隆父 Grammar 的全部 Token通过 cloner.cj 深拷贝不影响父语法用你传入的 Token 列表覆盖同名标记——比如父语法的keyword换成你自己的 C 关键词正则名字对不上的 Token 原样保留以仓颉语言为例prism_cangjie.cj 继承 clike 后只覆盖了keyword、number、string、operator等少数标记comment之外的通用能力全部白拿。关键认知extendGrammar 是全量克隆 定点替换父语法完全不受影响你可以放心大胆地改。技巧二insertBeforeToken 在指定位置精准插入 ✨为什么要插入而不是覆盖有些新标记在父语法里根本不存在。比如 C 语言没有booleantrue/false标记Cpp 需要新增它。此时不能靠覆盖而是告诉 prism4cj请把新标记插到某个已有标记的前面。insertBeforeToken实现见 grammar_utils.cj核心签名GrammarUtils.insertBeforeToken(grammar, 目标标记名, 新Token列表)prism_cpp.cj 是教科书级用法连续三次插入插入位置新增标记作用function之前boolean高亮 true/falsekeyword之前class-name高亮 class 后的类名string之前raw-string高亮 C11 原始字符串顺序即优先级高亮引擎按标记顺序逐个匹配先匹配到的吃掉这段文本。把raw-string插在string前面原始字符串就不会被普通字符串规则抢先截胡——这是 prism 系高亮库最核心的技巧之一。⚠️ 注意insertBeforeToken是就地修改传入的 Grammar与 extendGrammar 的克隆后返回新对象不同操作对象时别搞混。技巧三TokenFilter 过滤式继承 有些标记继承过来反而碍事clike 基类里有class-name和Bool等标记但 C 语言根本没有类的概念这些规则留在 C 的语法里只会产生误高亮。解决方案就是TokenFilter接口定义在 grammar_utils.cj——它只有一个test方法返回true保留该标记返回false丢弃。C 语言的实现非常直白见 prism_c.cj返回 class-name ! name Bool ! name也就是说除了class-name和Bool其他标记统统继承。使用方式是调用带 filter 的四参版extendGrammar源码位置Go、Kotlin 等语言同样采用了这一招。选型口诀只想换规则 → 三参版extendGrammar要删掉不合适的标记 → 四参版 TokenFilter三大技巧组合拳Cpp 的完整实战 把三个技巧串起来看 prism_cpp.cj这就是一个完整的新语言接入流程GrammarUtils.require(prism, c)拿到父语法extendGrammar克隆 c 语法覆盖 C 专属的keyword、operator正则三次insertBeforeToken补上boolean、class-name、raw-string返回新 Grammar注册后即被 grammar_locator.cj 装载可用全程不到 50 行代码却拥有了 c clike 两层基类的全部高亮能力。新手避坑清单 ⚠️改正则先测边界覆盖keyword时建议保留\b(?:...)\b形式避免if误伤ifconfig插入位置决定胜负越特殊的标记越要插得越靠前raw-string 在 string 前filter 返回逻辑别写反test返回true是保留不是过滤掉嵌套路径慎用insertBeforeToken支持a/b形式定位 inside 嵌套标记实现细节但一个 Token 有多个 pattern 时只能定位到第一个带 inside 语法的 pattern更多接口细节可查阅 doc/feature_api.md核心类源码在 src/prism/prism.cj、src/prism/grammar.cj 和 src/prism/token.cj。总结 技巧适用场景一句话记忆extendGrammar继承父语言、替换规则克隆 覆盖insertBeforeToken父语法没有的新标记插得越前优先级越高TokenFilter剔除不合适的继承标记按需瘦身掌握这三大技巧你就能像仓库中的 Cpp、Cangjie、Kotlin 一样用几十行代码为 prism4cj 添加一种全新语言的高亮支持。上手最快的方式打开 src/languages/ 挑一个你熟悉的语言文件读一读再照着 test/LLT/ 下的测试用例写几个自己的进阶之路就此打通。【免费下载链接】prism4cj一个轻量的语法高亮库项目地址: https://gitcode.com/Cangjie-TPC/prism4cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉