android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...

zExpression 句法编译器+解释器,脚本引擎内核

技术体系解释:

在编译原理的技术体系中,凡是处理文本化的代码前,都需要做一次预处理,其中我们常说的语法,语法糖,都是一种预处理程序

词法:词法是对文本关键字,数字,符号,进行分类整理,最后形成词法树,并且严格遵循顺序化处理原则

申明:在预处理代码中,申明部分,叫做申明树,申明树又依赖于词法顺序预处理,因为对词法预处理是一种简化手段

句法:在经过了申明预处理以后,是对代码表达式的单行逻辑操作进行处理,这一步叫句法,取为zExpression句法编译器是我从曾经撰写的编译器中特意剥离出来的解决方案,它可以独立出来分发和使用,可以实用数字化预处理,图形图像,科学计算等等领域,也可以作为学习提高自己的手段

核心思路

实现zExpression采用的是对等复杂化原则,面向解决编译器问题而编写,复杂度相比于常规程序会高许多,因为解决了最终问题,代码在命名和堆结构上也看不出漏洞,所以它是成熟句法解释器方案

zExpression特点

完整的单步原子化操作

完整的符号优先级后处理

能预处理字面错误,并反馈错误发生在哪

能识别浮点和整数的自然数写法

支持函数调用

支持自定义脚本语法

逆波兰2.0符号优先级处理

支持安卓和苹果各型号手机

完整的功能Demo,完整性能和解析准确性评估框架

在编译以后,能形成原子化op代码,可以通过stream高速载入并运行,不限制cpu类型

OP代码框架可以轻松译码成ARMv7 ARMx64 x64 x86等平台的机器码

矩阵和向量表达式支持

平台支持,test with Delphi 10.3 update 2 and FPC 3.0.4

Windows: delphi-CrossSocket(C/S OK), delphi-DIOCP(C/S OK), delphi-ICS(C/S OK), delphi-Indy(C/S OK),delphi+fpc Synapse(C/S OK)

Android:Indy(C/S OK), CrossSocket(Only Client)

IOS Device: Indy(C/S OK), CrossSocket(Only Client)

IOS Simulaor: n/a

OSX: Indy(C/S OK),ICS(未测试), CrossSocket(C/S OK)

Ubuntu16.04 x64 server: Indy(C/S OK), CrossSocket(C/S OK)

Ubuntu18.04 x86+x64 Desktop:only fpc3.0.4 Synapse(C/S OK)

Ubuntu18.04 x86+x64 Server:only fpc3.0.4 Synapse(C/S OK)

Ubuntu18.04 arm32+arm neon Server:only fpc3.0.4 Synapse(C/S OK)

Ubuntu18.04 arm32+arm neon desktop:only fpc3.0.4 compile ok,no test on run.

Ubuntu16.04 Mate arm32 desktop:only fpc3.0.4 compile ok, test passed

Raspberry Pi 3 Debian linux armv7 desktop,only fpc 3.0.4,test passed.

wince(arm eabi hard flaot),windows 10 IOT,only fpc 3.3.1,test passed.

CPU架构支持,test with Delphi 10.3 update 2 and FPC 3.0.4

MIPS(fpc-little endian), soft float, test pass on QEMU

intel X86(fpc-x86), soft float

intel X86(delphi+fpc), hard float,80386,PENTIUM,PENTIUM2,PENTIUM3,PENTIUM4,PENTIUMM,COREI,COREAVX,COREAVX2

intel X64(fpc-x86_64), soft float

intel X64(delphi+fpc), hard float,ATHLON64,COREI,COREAVX,COREAVX2

ARM(fpc-arm32-eabi,soft float):ARMV3,ARMV4,ARMV4T,ARMV5,ARMV5T,ARMV5TE,ARMV5TEJ

ARM(fpc-arm32-eabi,hard float):ARMV6,ARMV6K,ARMV6T2,ARMV6Z,ARMV6M,ARMV7,ARMV7A,ARMV7R,ARMV7M,ARMV7EM

ARM(fpc-arm64-eabi,hard float):ARMV8,aarch64

更新日志

2020-3

对注册函数新增申明信息

修复函数前符号 -func(1+1)

修复函数后符号 func(1+1)-1

2019-7

矩阵表达式支持

// 构建3*3的variant矩阵,使用c语法表达式

procedure MatrixExp;

var

m: TExpressionValueMatrix;

begin

DoStatus('');

m := EvaluateExpressionMatrix(3, 3,

'"hello"+"-baby"/*备注:字符串联合*/,true,false,' +

'1+1,2+2,3+3,' +

'4*4,4*5,4*6', tsC);

DoStatus(m);

end;

// 构建variant向量数组,使用pascal语法表达式

procedure MatrixVec;

var

v: TExpressionValueVector;

begin

DoStatus('');

v := EvaluateExpressionVector('0.1*(0.1+max(0.15,0.11)){备注内容},1,2,3,4,5,6,7,8,9', tsPascal);

DoStatus(v);

end;

2019-4

修复TextParsing备注编码后的bug

OpCode新增回调调用类型(参考zAI工具链中的Script支持)

2018-9-29

新技术:新增文本探头技术:可将蚂蚁程序的编程复杂度降低50%

新技术:逐字符文本字符爬取性能提升%500

多平台:全面支持多种IOT系统以及多处理器硬件架构

新Demo:新增一个FPC的Demo,该Demo不使用匿名函数

工艺:兼容基于FPC对IOT的支持:从底层到高级,大规模统一调整命名,此项调整会影响很多工程的代码细节

// 本项目中的回调分为3种

// call: 直接指针回调,fpc+delphi有效

// method: 方法回调,会继承一个方法宿主的地址,fpc+delphi有效

// proc: 匿名过程回调,只有delphi有效

// 如果本项调整对于改造现有工程有一定的工作量,请使用字符串批量处理工具

// 在任何有回调重载的地方,方法与函数,均需要在后缀曾加回调类型首字母说明

// 如

RunOp 变更为 RunOpP() // 后缀加P表示匿名类型回调

RunOp 变更为 RunOpM() // 后缀加M表示方法类型的回调

RunOp 变更为 RunOpC() // 后缀加C表示指针类型的回调

2018-7-6

大幅修正底层库的命名规则

对fpc/86/64平台支持,全部基础库支持Linux下的无故障编译和运行

对fpc编译器3.1.1全面支持

新增大小字节序支持

修复对32位fpc编译器不认for用Int64的问题

修复字符串在fpc编译器运行于linux发生异常的问题

新增pascal预编译工具,将pascal代码规范成c风格的全部统一大小写,全面兼容Linux区分大小写文件名的机制

2018-4-12

修复内核中的内存越界bug:该bug的症状为无故提示内存无法访问,通过正常debug很难排除,这是是内存越界时所造成的bug

2018-3-1

在TPascalString内核中新增模糊字符串对比函数(SmithWaterman),优化与测试完成

2018-2-28

修复c转义字符buf,感谢阿木qq345148965

将charPos的参数命名更改成了cOffset,并且加入const修饰符

2018-2-26

修复使用Release模式无法编译问题

修复zExpression的切割分段不正确问题

小幅提升字符探头的切割性能(splitToken,splitChar)

因为底层重写了一个原子锁,在很多record申明前加入了packed修饰符

2018-2-25

新增自定义表达式符号支持

新增自定义表达式符号的演示

2018-2-25

修复嵌套函数参数不能正确展开接口的问题

修复解析引擎的数字探头不能识别16进制自然数和函数问题

新增一个赋值的demo范例,包含变量申明,静态复用,动态复用,总共三部曲,请在范例演示中自行研究

修复字符串和数字匹配联合的问题

支持c代码风格0x16进制语法

2018-2-6

重写了一次解析器内核,支持函数调用,从现在起,zExpression会不断更新

使用zExpression有疑问请加互助qq群490269542,请不要直接联系作者

by.qq600585

2017-6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平面设计中的网格系统pdf_平面设计基础知识

导语:“ 给大家推荐优质书籍,包含平面设计基础入门知识的书籍分享”。平面设计基础知识分享书籍名称:《写给大家看的设计书》作者:[美]罗宾威廉姆斯著平面设计的四个原则:复杂的设计原理在《写给大家看的设计书》中凝炼…

LeetCode 1814. 统计一个数组中好对子的数目(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums &#xff0c;数组中只包含非负整数。 定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。 比方说 rev(123) 321 &#xff0c; rev(120) 21 。我们称满足下面条件的下标对 (i, j) 是 好的 &#xff1a; 0 < i <…

如何看当前windows是utf8还是gbk_监理工程师5月份出教材,现在如何备考?

监理工程师教材预计5月份出版&#xff0c;相信考生都知道监理工程师教材对于考生复习的重要性&#xff0c;那么现在考生应该如何学习呢?听小编给你说一说。教材没有发布之前怎么学习?教材改动比较大&#xff0c;没有发布之前我们就不要学习了么?小编不这么认为&#xff0c;监…

巧用Hint

一般计算fibonacci的方法&#xff1a; 1 def fibonacci (n): 2 if n 0 or n 1: 3 return 1 4 else: 5 return fibonacci(n-1) fibonacci(n-2) 这样的 call graph for fibonacci with n4: 当计算 fibonacci(30)的时候还可以&#xff0c;当计算 fibon…

LeetCode 1816. 截断句子

文章目录1. 题目2. 解题1. 题目 句子 是一个单词列表&#xff0c;列表中的单词之间用单个空格隔开&#xff0c;且不存在前导或尾随空格。每个单词仅由大小写英文字母组成&#xff08;不含标点符号&#xff09;。 例如&#xff0c;"Hello World"、"HELLO"…

脸书令牌怎么使用_网工知识角|QOS技术令牌桶算法一分钟速记,考试无忧

点上方蓝字关注公众号&#xff0c;坚持每天技术打卡学网络&#xff0c;就在IE-LAB国内最著名的高端网络工程师培养基地QOS是网络服务质量技术&#xff0c;是所有考试中都会有的考点&#xff0c;主要在SP的课程中详述&#xff0c;是高中低级的网工都有必要了解的技术。今天我们来…

vivox27升级鸿蒙,vivo x27 系统更新好吗?

3月19日&#xff0c;vivo在三亚正式发布了vivo X27和vivo X27 Pro两款产品&#xff0c;继续采用了升降式摄像头以实现“真全面屏”。vivo X27配备了一块6.39英寸super AMOLED屏幕&#xff0c;比例为19.5:9&#xff0c;屏占比达到了91.6%&#xff0c;并应用了第六代屏幕指纹HD版…

根据XML更新Userprofile

#  Using powershell code, update the user profile base on the XML file.#  Date: 2015-01-29 # Update New User Property$snapin Get-PSSnapin | Where-Object {$_.Name -eq Microsoft.SharePoint.Powershell} if ($snapin -eq $null) { Write-Host "L…

LeetCode 1817. 查找用户活跃分钟数(哈希)

文章目录1. 题目2. 解题1. 题目 给你用户在 LeetCode 的操作日志&#xff0c;和一个整数 k 。 日志用一个二维整数数组 logs 表示&#xff0c;其中每个 logs[i] [IDi, timei] 表示 ID 为 IDi 的用户在 timei 分钟时执行了某个操作。 多个用户 可以同时执行操作&#xff0c;单…

日期传递过程_买东西别再只看生产日期和保质期了!快算算你一天吃了多少添加剂?...

开始今天的科普前&#xff0c;微医君先和大家讲一下我们办公室上周出现的“假”全麦面包事件。全麦面包是很多减肥人士最热衷的食物之一&#xff0c;小A也不例外。结果上周微医君帮她买面包时&#xff0c;就发现小A平时经常买的全麦面包是“假”的。为什么明明包装上写着“全麦…

第二次打开不是最大_舵手图解:大盘日线第二次形成买点信号

吾股舵手个人微信公众号&#xff1a;股民读书会&#xff08;ID&#xff1a;gumindushuihui&#xff09;声明&#xff1a;只做客观解读&#xff0c;不做主观预测&#xff0c;仅供参考&#xff0c;不作交易依据。择时看大盘&#xff0c;选股看行业。股票咨询请在文末留言。大盘涨…

Window phone用手机来控制电脑的多媒体播放

为了用电脑看电影时方便控制&#xff0c;我就突发其想&#xff0c;做一个手机app来通过无线网络远程调节电脑上的音量。后来进行尝试成功后&#xff0c;我就想&#xff0c;光是调音量似乎单调了些&#xff0c;就把播放/暂停&#xff0c;上一首&#xff0c;下一首&#xff0c;等…

华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...

IT之家 5 月 28 日消息 在今年 4 月份的华为全屋智能及智慧屏旗舰新品发布会上&#xff0c;华为智慧屏 V 系列 2021 款正式发布。新产品外观更加简洁&#xff0c;底部音响组件进一步隐藏&#xff0c;同时依旧采用弹出式 2400 万像素 AI 摄像头。今天&#xff0c;华为官方宣布&a…

LeetCode 1818. 绝对差值和(二分查找)

文章目录1. 题目2. 解题前三题&#xff0c;拼手速。最后一题暴力超时。1. 题目 给你两个正整数数组 nums1 和 nums2 &#xff0c;数组的长度都是 n 。 数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|&#xff08;0 < i < n&#xff09;的 总和&a…

python那些事儿编程技巧_python一些编程技巧(持续更新)

def xxx(x1,x2,n3):#一般函数中会传递数一个或数个可变参数以及一个默认位置参数#可变参数 *kargdef xxx(*xx):s0for i in xx:sireturn s#可以在函数中输入一个或多个变量&#xff0c;系统默认将多个变量组成tuple来处理num[1,2,3,4]print(xxx(*num)) #如果参数就是个列表&…

python获取股票数据_python根据股票代码获取当前数据

1.[代码][Python]代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import re import datetime def getStockInfo(url): """根据url获取信息""" stockList [] request urllib2.Request(url) response urllib2.urlopen(req…

struts2 中文乱码问题,自定义过滤器通用解决方法

问题描述 在JSP中使用form表单向后台action中传递中文参数&#xff0c;后台action接收到参数出现中文乱码。JSP页面统一采用了utf-8编码格式。由于struts2默认采用的编码为utf-8&#xff0c;根据官方文档的提示,编码格式改为GBK,就能解决中文乱码。遂改之。但是&#xff0c;改为…

LeetCode 1819. 序列中不同最大公约数的数目

文章目录1. 题目2. 解题1. 题目 给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如&#xff0c;序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序列&#xff0c;可以通过删除数组中的某些元素…

python concat_python-pd.concat()不合并在同一索引上

我有一个包含称为fcst的预测的df,如下所示&#xff1a; yhat yhat_lower yhat_upper ds 2015-08-31 -0.443522 -19.067399 17.801234 2015-09-30 6.794625 -31.472186 46.667981 ... 进行此转换后&#xff1a; fcst2 fcst["yhat"].to_frame().rename(columns{"…

1803无法升级到2004_汽车排放国标是什么意思:1/2/3/4/5/6的升级是为了什么?

全球各大汽车工业强国或地区都有汽车排放制造标准&#xff0c;知名度较高的有以下四组。美标欧标日标国标在上述标准中欧洲与日本开始实施的节点比较早&#xff0c;美国轻型汽车排放法规「Tier」与上世纪90年代开始实施&#xff0c;国标则是从2000年才开始。之所以要为汽车制造…