|
楼主 |
发表于 2005-9-15 14:25:36
|
显示全部楼层
FinSH 0.1.0版,Fava in Shell,精简剪裁版,用于命令行交互
- x86 @ MinGW环境下(默认配置,-O2选项编译,现在是大致情况,以正式版为准,误差应该在512字节以内)
二进制文件大小 37603 (strip 20480)
text 16896
data 2560
bss 1632
- 支持的数据类型,char, short, int, long, unsigned,指针。
- 支持的操作类型,+, -, *, %, /, &, |, ^, ~, ++, --, (指针操作符)*, &
- 支持的语句 表达式;
- 不支持复杂的数据类型(数组、结构体等。只支持单一指针声明,即不支持指针的指针等声明方式),不支持语句,除了最基本的 expression ';',不支持函数声明,不支持无关表达式(和FinC相比,少了条件表达式,逗号运算,条件表达式(大于,小于,等于))
- 运行过程中生成中间代码,内部实现了栈式的虚拟机,支持C语言的绝大多数表达式,运行过程中不动态分配内存
- 适合于操作系统内核态运行,无操作系统运行(用到的几个标准C函数,memset,strncpy,strncmp)
FinSH的运行过程:
启动FinSH,初始化语法分析节点,栈,虚拟机地址空间(都清零)
|
vv
等待用户命令输入
|
vv
分析用户输入指令(主要就是一个完整的C语言表达式分析)
|
vv
生成语法树
|
vv
语法树节点类型检查,添加一些辅助信息(采用递归遍历语法树)
|
vv
编译语法树,生成中间代码(虚拟机二进制执行码),创建脚本变量空间
|
vv
释放语法树节点
|
vv
执行中间生成的虚拟机二进制执行码
|
vv
执行完毕取最后一个栈的值输出
|
vv
跳到下一个等待用户输入命令循环
* FinSH 0.1.0将在接下来的几天发布,初始功能已经有了,出错处理还不够丰富:-)
有否自愿测试人员? |
|