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
總結
以上是生活随笔為你收集整理的android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断深度学习模型的稳定性_全自动搭建定制
- 下一篇: python获取当前路径的方法_Pyth