总算基本完成脚本平台 for C#2.0

简介:

刚刚才用上C#2.0,原来是这么好用啊,迫不及待的想用熟它;

最近想到平台的体系,认为自己的脚本解释器是必不可少的,于是自己抄刀;花了将近一个星期,总算建设了一个有点象样的框架了。

基本设计:
1、基于C#2.0开发
2、通过反射动态调用LIB的方法
3、完全手写的SCRIPT解释器,不用.NET的编译器做脚本解释器(完全按行模式执行)
4、提供一个基础的控制台程序(SHELL),支持批处理模式反射调用方法
5、提供DEBUG模式的SCRIPT IDE,用于简单调试(目前解释器还有点小BUG,DEBUG功能目前还未完善)

以下是SHELL的外观图:

完全模拟DOS的命令行,所有指令为反射调用的LIB方法;通过全局的配置读入:
Environment.xml配置用于存放LIB的相关信息

 1 <? xml version="1.0" encoding="utf-8" ?>
 2 < ModuleInfoConfig  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"  xmlns ="http://www.csit.com.cn" >
 3    < ModuleInfo >
 4      < ModuleName > C:\Documents and Settings\Administrator\桌面\MyShell\MyShell\Lib\CSIT.StdLib.dll </ ModuleName >
 5      < NameSpace > CSIT.StdLib </ NameSpace >
 6      < MainClassName > StdLibClass </ MainClassName >
 7      < Key > STD </ Key >
 8    </ ModuleInfo >
 9    < ModuleInfo >
10      < ModuleName > C:\Documents and Settings\Administrator\桌面\MyShell\MyShell\Lib\CSIT.WinForms.dll </ ModuleName >
11      < NameSpace > CSIT.WinForms </ NameSpace >
12      < MainClassName > Msg </ MainClassName >
13      < Key > MSG </ Key >
14    </ ModuleInfo >
15 </ ModuleInfoConfig >

Command.xml用于存放所有指令的描述信息
<? xml version="1.0" encoding="utf-8" ?>
< ModuleCommandConfig  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"  xmlns ="http://www.csit.com.cn" >
  
< CommandConfig >
    
< CommandName > Cls </ CommandName >
    
< Description > 清除屏幕 </ Description >
    
< CallMethodName > Cls </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList  />
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > Print </ CommandName >
    
< Description > 输出字符串 </ Description >
    
< CallMethodName > Print </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > ShellExecute </ CommandName >
    
< Description > 执行程序 </ Description >
    
< CallMethodName > ShellExecute </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > = </ CommandName >
    
< Description > 表达式计算 </ Description >
    
< CallMethodName > Eval </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > Dir </ CommandName >
    
< Description > 目录 </ Description >
    
< CallMethodName > Dir </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > CD </ CommandName >
    
< Description > 更改目录 </ Description >
    
< CallMethodName > CD </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > STD </ Key >
  
</ CommandConfig >
  
< CommandConfig >
    
< CommandName > MsgBox </ CommandName >
    
< Description > 消息对话框 </ Description >
    
< CallMethodName > MsgBox </ CallMethodName >
    
< ReturnType > void </ ReturnType >
    
< ParamsList > string </ ParamsList >
    
< Key > MSG </ Key >
  
</ CommandConfig >
</ ModuleCommandConfig >

以上两个配置文件全部通过序列化方式生成,期间还设计到一个指令生成器;(该部分由同事完成)将DLL文件装入后自动建立这些配置信息,命令部分只获取PUBLIC方法。

批处理的调用:
BATCH FROM FILE=C:\Test.cmd
cls
print 开始测试批处理!
msgbox 这个是文本对话框
ShellExecute notepad
print 已经启动了写字板了吗?
print 开始测试表达式!
print 
1 + 2 + 3 + 4 = ?
=   1 + 2 + 3 + 4
print 
1 * 99 = ?
=   1 * 99
print 列表目录的指令为 dir
print 切换目录的指令为 cd

print 结束执行

脚本的调用:
script=c:\Math Board.ssf
begin
    NewLine 
=  Chr( 13 ) & Chr( 10
    N 
=   9
    for (i
, 0 , 10 , 1 )
        S 
=  S & N &  "  x  "  & i &  "  =  "  & (N * i) & NewLine
    next
    call ShowMsg(S
, " Math Board Of  "  & N)
end

脚本调试器的调用
script debug


脚本的语法定义:
begin
   statement;
   statement;
end
statement
=   条件语句
if  (cond)
  statement
else
  statement
endif 

或者

if  (cond)
 statement
endif 

statment
=   For语句

for  (val,开始值,结束值,增量值)

    statement;
    statement;
next

statement
=  While语句

while  (条件)
  statment;
  statment;
next

statement
= call语句

calll func par,par,par




本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2006/01/24/322361.html,如需转载请自行联系原作者
相关文章
|
3月前
|
架构师 Linux Shell
Linux环境下要想事半功倍,少不了这4个技巧!
Linux环境下要想事半功倍,少不了这4个技巧!
|
6月前
|
存储 Shell 程序员
第一次使用脚本后想学点东西
第一次使用脚本后想学点东西
43 0
|
6月前
|
JSON 开发工具 数据格式
基于Python开发的开心麻花影视作品分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的开心麻花影视作品分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
|
6月前
|
定位技术 开发工具 Python
基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
JSON C++ 数据格式
《C++避坑神器·二十二》VS能正常运行程序,但运行exe程序无响应解决办法
《C++避坑神器·二十二》VS能正常运行程序,但运行exe程序无响应解决办法
159 0
|
人工智能 Cloud Native Devops
也许是时候停止编写详细的操作手册了
也许是时候停止编写详细的操作手册了
64 0
|
运维 监控 Shell
太牛了!100个Shell脚本实例,代码清晰拿来就能用,再也不怕写不对了!
太牛了!100个Shell脚本实例,代码清晰拿来就能用,再也不怕写不对了!
|
小程序 前端开发 关系型数据库
手把手教你将小程序项目跑起来【真自律小程序】
1、下载项目文件 在【猫宁一】公众号中回复【源码】,得到下载链接,将项目下载下来并解压 2、打开项目文件,编辑server/config.js文件 将红框圈出来的地方改成自己的信息
739 0
手把手教你将小程序项目跑起来【真自律小程序】
|
监控 小程序
Win系统 - 微信居然自带修复工具?快来试试(下)
Win系统 - 微信居然自带修复工具?快来试试(下)
227 0
Win系统 - 微信居然自带修复工具?快来试试(下)
|
移动开发 小程序 IDE
小程序测试全攻略,还学不会你来找我(含实操代码)
小程序测试全攻略,还学不会你来找我(含实操代码)
540 0
下一篇
无影云桌面