新闻详情

新闻详情

首页 / 资讯中心 / 详情

AScript扩展多种脚本语言

发布时间:2026/10/28 22:35:24来源:尧图网络
AScript扩展多种脚本语言
、自定义语法AScript底层解析脚本生成token流语法解析器对token流进行处理就会调用ITokenHandler处理器该接口定义如下1 public interface ITokenHandler 2 { 3 /// summary 4 /// token处理 5 /// /summary 6 /// param nameanalyzer语法分析器/param 7 /// param namee当前token、语法树及上下文信息/param 8 void Build(DefaultSyntaxAnalyzer analyzer, TokenAnalyzingArgs e); 9 }DefaultSyntaxAnalyzer参数为语法分析器可以调用其中的BuildOneStatement或者BuildMultiStatement方法来读取一条或多条语句。自定义语法就是对当前token以及前后语句进行处理将结果添加到语法树来实现期望的逻辑功能。示例定义sql条件语句的and语法1 /// summary 2 /// ![CDATA[age20 and age50]] 3 /// /summary 4 public class AndTokenHandler : ITokenHandler 5 { 6 public static readonly AndTokenHandler Instance new AndTokenHandler(); 7 8 public void Build(DefaultSyntaxAnalyzer analyzer, TokenAnalyzingArgs e) 9 { 10 e.IsHandled true; 11 if (!e.Ignore) 12 { 13 var op new OperatorNode(and, DefaultSyntaxAnalyzer.OperatorPriorities[], 2); 14 e.TreeBuilder.AddOperator(e.BuildContext, e.ScriptContext, e.Options, e.Control, op); 15 } 16 } 17 }sql中的and语法等效于C#中的操作符所以优先级取操作符的优先级同时sql语言环境中需要注册and函数 AddFunc(and, AndAlsoOperator.Instance);二、定义语言AScript中提供了ScriptLang类来扩展语言该类包含类型、变量、函数、语法解析ITokenHandler管理。多语言势必会带来语法兼容问题比如sql条件中的号是相等的意思等效于C#中的跟C#中的赋值符号有冲突可设置属性Compatiblefalse表示不兼容默认语言在脚本或ScriptContext上下文中需要指定语言才能执行。示例定义Sql语言这里只实现一个简单的条件判断功能1 public class SqlLang : ScriptLang 2 { 3 public static readonly SqlLang Instance new SqlLang(); 4 5 public SqlLang() 6 { 7 this.Compatible false; 8 9 AddFunc(., DotOperator.Instance); 10 AddFunc(!, BoolNotOperator.Instance); 11 AddFunc(, LessThanOperator.Instance); 12 AddFunc(, GreaterThanOperator.Instance); 13 AddFunc(, EqualOperator.Instance); 14 AddFunc(, GreaterThanOrEqualOperator.Instance); 15 AddFunc(, LessThanOrEqualOperator.Instance); 16 AddFunc(!, NotEqualOperator.Instance); 17 AddFunc(and, AndAlsoOperator.Instance); 18 AddFunc(or, OrElseOperator.Instance); 19 20 AddTokenHandler(and, AndTokenHandler.Instance); 21 AddTokenHandler(AND, AndTokenHandler.Instance); 22 AddTokenHandler(or, OrTokenHandler.Instance); 23 AddTokenHandler(OR, OrTokenHandler.Instance); 24 AddTokenHandler(, EqualTokenHandler.Instance); 25 AddTokenHandler(like, LikeTokenHandler.Instance); 26 AddTokenHandler(LIKE, LikeTokenHandler.Instance); 27 } 28 }由于AScript是区分大小写的注册token时大小写都注册一下便于sql语句中支持大小写语法示例中的or、like等语法代码不一一列出了感兴趣的同学可以到开源项目的单元测试中查看后续可能会开发一个比较完备的sql语言脚本。注册SqlLang Script.Langs[sql] SqlLang.Instance;三、执行指定语言脚本如果不指定语言则使用默认且兼容的语言来执行脚本。1、ScriptContext中设置Langs属性来指定脚本语言1 string s p.Name like to% or p.Age20 and p.Age50; 2 var script new Script(); 3 script.Context.Langs new[] { sql }; 4 var matchFunc script.CompilePerson, bool(s, p); 5 var list new ListPerson 6 { 7 new Person(jim, 18), 8 new Person(tony, 60), 9 new Person(tom, 19), 10 new Person(san, 25), 11 new Person(lin, 70) 12 }; 13 var matchedList list.Where(matchFunc).ToList(); 14 Assert.AreEqual(3, matchedList.Count); 15 Assert.AreEqual(tony, matchedList[0].Name); 16 Assert.AreEqual(tom, matchedList[1].Name); 17 Assert.AreEqual(san, matchedList[2].Name);2、脚本中通过#lang语法嵌入其他语言指定多个语言使用逗号,分隔如 #lang 中文,CSharp1 string s 2 bool isMatch(Person p) { 3 #lang sql 4 p.Age20 and p.Age50 or p.Name like to% or p.Namepen; 5 #end 6 } 7 var matchedList new ListPerson(); 8 foreach(var item in list) { 9 if (isMatch(item)) matchedList.Add(item); 10 } 11 matchedList; 12 ; 13 var list new ListPerson 14 { 15 new Person(jim, 18), 16 new Person(tony, 60), 17 new Person(tom, 19), 18 new Person(san, 25) 19 }; 20 var script new Script(); 21 script.Context.AddTypePerson(); 22 script.Context.SetVar(list, list); 23 var matchedList script.EvalListPerson(s); 24 Assert.AreEqual(3, matchedList.Count); 25 Assert.AreEqual(tony, matchedList[0].Name); 26 Assert.AreEqual(tom, matchedList[1].Name); 27 Assert.AreEqual(san, matchedList[2].Name);四、结语AScript 的多语言扩展能力在同一脚本中嵌入不同脚本语言让开发者和用户可以使用最合适的语言进行脚本配置
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/28 16:06:12

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

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

阅读更多 →
无法下载Windows系统iso文件 2026/10/28 13:44:36

无法下载Windows系统iso文件

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

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/28 6:32:58

【清华代码熊】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/10/28 16:06:11

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/10/28 11:07:30

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/10/28 16:06:10

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

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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