4月忙碌在代码海洋中……
虽然第一个编程器是一个不完整的汇编解释运行器,但还是很兴奋的。
2000行的代码,但很明显,代码耦合度有点高,应该把读取操作数的代码编成函数调用……去掉这些应该还有1500行吧……
刚进高校,周围的人都在为编程的事苦恼着,怎样才能随时随地编写程序呢?目光扫向了手机。我的手机是S40的,所以不能运行SIS程序,只有JAVA可选。
想起曾经用VB写了个“按键模拟程序”email给“按键精灵”,然后就发现从此“按键精灵”多了VB脚本功能……-_-///
那个程序里面其实用到了解释运行的方法,在VB里就是狂用case了……
半天看完JAVA语言与J2ME的MIDLET和CANVAS,接着就开始了。
一开始策划着写一个C语言的解释运行器,但规划时发现要考虑的东西太多,编下来遍乱了阵脚……
于是移出编好的程序UI,重新设计解释运行器。
1. 汇编解释运行器规划
解释器部分:
LineInfo
---------
|operator
|operator_No
---------
|oprand_num
|oprand_1
|oprand_1_type
|oprand_2
|oprand_2_type
---------
Interpreter
---------
|get_line_info
|get_operator
|check_operator
|get_oprand
|check_oprand
---------
运行器部分:
RunStack:
--------- U = int
|memory[16KU]
|push
|pop
|m_write
|m_read
|reg_write
|reg_read
|chang_flag
---------
RunCode
---------
|exe_a_line
|check_error
|display_result
|run_code
|(functions such as print,mov,add,dec,xor,jmp...)
---------
在使用exe_a_line的时候发现,如果递归地使用它,计算1+2+3+...+100时一个单循环在模拟器上运行正常,但在手机上直接Out of memory了……
所以改成了迭代式,在run_code中用while,直到遇到exit或end,或者空行(输出没有exit or end)结束……
2.后期思考
这个汇编的解释运行器:
(1)没有实现[ ]中的偏移计算,只能[reg]或[num]。
这个问题很好解决,只要写一个非常简单的表达式计算函数就行了——每次读一个数据和一个计算符并放入计算栈,最后按优先级计算结果。
(2)没有实现标签与变量自定义
这个可以用一个表实现——一个表中存储变量名,变量类型和变量字符化的值。
(3)提高运行速度
可以采用即时编译——输入一行代码后,即时编码成更方便读取的结构,提高运行效率。
向C的编译器发起进攻!!…………
J.Y.Liu
09.05.04
差不多两个月了,厄,还没时间继续写下去,那么……
http://sourceforge.net/projects/mobilecinjava/files/
说明:1.有些函数还没有完成 2.FLAGS设计有缺陷,需要重新编写……