# SunnyScript **Repository Path**: tufeiping/SunnyScript ## Basic Information - **Project Name**: SunnyScript - **Description**: 2008年业余时间做的一个语言编译器和虚拟机,使用Delphi7开发的,一个单独单元,语言可以作为浏览器脚本使用,示例中有与IE交互的例子。 最早是提交到Google Code,后来不能访问,最近才想起来这么个代码,所以转移到gitee中,学习编译原理的同学可以参考,但写完之后,再也没有维护过了。 - **Primary Language**: Delphi - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2020-06-08 - **Last Updated**: 2023-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sundy Script 脚本编译器及虚拟机 2008年业余时间做的一个语言编译器和虚拟机,使用Delphi7开发的,一个单独Unit单元,语言当时定位为:可以作为浏览器脚本使用。 示例(test)中有与IE交互的例子。 最早是提交到Google Code,后来不能访问,最近才想起来这么个代码,所以转移到gitee中,学习编译原理的同学可以参考,但写完之后,再也没有维护过了。 ## 构建环境级版本 - Delphi 7 - Windows 2000SP4 7+ 均可 > 无其他第三方依赖 ## 文件夹及说明 ~~~text ┌── ParserCompiler.pas 编译器/执行引擎(虚拟机) 主单元,也是唯一的Unit │ └── test ─┬─ HTMLDOM 使用 SundyScript 操作DOM的例子 │ ├─ ScriptIDE.exe 一个编写SunyScript脚本的简单的IDE环境,可以通过它进行单步调试,查看虚拟机代码和反编译代码等信息 │ └─ UACNew 用SundyScript结合HTML UI 做的UAC(用户权限控制)设置小程序 ~~~ ## BNF `BNF` 表达式内容如下 ~~~text // Sundy Script Syntax BNF // Author Sundy TU 2008-11-10 PfnProgram -> "program;" PfnProgramBody PfnProgramBody -> PfnStatment [;PfnStatment]* PfnStatment -> PfnFuncdef|PfnStatmentBody PfnStatmentBody -> PfnVardef |PfnAssignStmt PfnVardef -> "var" PfnVarArgList PfnAssignStmt -> "return" PfnExpr|identifier "=" PfnExpr|PfnOocller2 "=" PfnExpr|Pfnarray2 "=" PfnExpr PfnFuncdef -> "function" Pfnfuncident "(" PfnFuncArgList ")" "{" PfnFuncBody "}" PfnArgList -> identifier [, identifier]* PfnFuncBody -> PfnFuncStmt [;PfnFuncStmt]* PfnFuncStmt -> PfnIfStmt|PfnRepeatStmt|PfnAssignStmt PfnIfStmt -> "if" "(" PfnExpr ")" "{" PfnProgramBody "}" ["else " "{" PfnProgramBody "}"] PfnForStmt -> "for" "(" indentifer "=" PfnExpr "to"["downto"] PfnExpr ")" "{" PfnProgramBody "}" PfnRepeatStmt -> "do" "{" PfnProgramBody "}" "while" "(" PfnExpr ")" PfnWhilwStmt -> "while" "(" PfnExpr ")" "{" PfnProgramBody "}" PfnExpr -> PfnSimpExpr ["<|>|==|<>|!=|>=|<=" PfnSimpExpr]* PfnSimpExpr -> PfnTerm ["+|-" PfnTerm]* PfnTerm -> PfnFactor ["*|/" PfnFactor]* PfnFactor -> "(" PfnExpr ")"|digit|Pfncaller|String|PfnOocaller|PfnArray Pfncaller -> identifier "(" PfnCallArgList ")" PfnArray -> identifier "[" PfnSimpExpr "]" Pfnoocaller -> identiter [oicaller]+ Pfnoicaller ->"." identifer | "." identifer "(" PfnCallArgList ")" Pfnoocller2 -> identiter [oicaller2]+ Pfnoicaller2 ->"." identifer | "." identifer "(" PfnCallArgList ")" ~~~ ## 关于后续 这个代码是周末在查看 `Google Code` 自己仓库的时候发现的(这个仓库应该是关闭很多年了,但还保留了个人自己的代码),2008年写完之后,本想用在自己的一些工具上,但由于工作原因,后来专攻 `Java`,很少再写桌面端应用,所以就没有应用了,目前也没有维护的打算,如果你打算在这个代码之上做些修改,你自己可以随意修改,也可以用于商业目的,不需要知会我~~ Have fun!!