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设计有缺陷,需要重新编写…… (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|