本帖最后由 lcw_swust 于 2012-8-18 13:54 编辑
看到了坛子里的“MicroBASIC解释器”(
http://www.amobbs.com/forum.php? ... 3%E9%87%8A%E5%99%A8)
网上也有其它的关于解释器的资料,如
“用C语言写解释器”
http://blog.csdn.net/redraiment/article/category/606586
附件中有个资料,大家也可以去参考参考:Tbasic自己动手编Basic解释器.doc
查看了诸多资料后,终于有了写一个C语言解释器的信心。
下面简单介绍一下这个解释器:
目标:单片机中运行C语言程序
省略:
include文件,静态变量(用全局变量代替),强制类型转换,
switch(if代替),GOTO,break,return,
宏定义
实现:
常量定义,全局变量定义,局部变量,指针,一维数组,
函数调用,
+ - * /运算,位运算,关系运算
if语句if...else if...else...
while语句while()...
API调用(如串口发数)
注意:
程序有漏洞,使用需小心。
工程编译后如图:(代码量稍微有点大)
2.jpg (161.78 KB, 下载次数: 1)
下载附件
2012-8-16 17:29 上传
本程序已在STC12C5A60S2单片机上运行通过。
DEBUG开启后,串口发出的源代码如下:
unsigned char a=0xff,b=10,c='a';
char tab[2]={1,c};
char* p1="hello";
long lp1=1234;
void add(int* c,int a,int b)
{
*c=a+b;
}
void main(void){
int d;
prints(p1);
prints("
a=");
printn(a,3);
prints("
b=");
printn(b,3);
prints("
c=");
printn(c,3);
prints("
tab[0]=");
printn(tab[0],3);
prints("
tab[1]=");
printn(tab[1],3);
prints("
");
d=0; while(d<100)
{
add(&d,d,10);
prints("
d=");
printn(d,5);
delayms(1000);
}
}
工程源代码:
TC解释器.rar
(117.93 KB, 下载次数: 207)
2012-8-16 17:30 上传
点击文件名下载附件
参考资料:
Tbasic.rar
(107.24 KB, 下载次数: 146)
2012-8-16 17:31 上传
点击文件名下载附件
Tb解释器.rar
(81.14 KB, 下载次数: 156)
2012-8-16 17:31 上传
点击文件名下载附件
用C语言写解释器 - 子清行 - 博客频道 - CSDN_NET.rar
(128.84 KB, 下载次数: 218)
2012-8-16 17:31 上传
点击文件名下载附件
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
这个东西的作用就是,把单片机当作电脑,然后在这台电脑上写一段C代码,然后它能运行这段C代码
一周热门 更多>