一个简单的C语言解释器

2020-01-23 14:42发布

本帖最后由 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 上传 点击文件名下载附件

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
43条回答
lcw_swust
1楼-- · 2020-01-23 16:43
本帖最后由 lcw_swust 于 2013-7-30 11:21 编辑

前段时间在做编译器的时候,对此程序进行了精简,现在发上来
TC解释器-精简.rar (108.25 KB, 下载次数: 87) 2013-7-30 11:06 上传 点击文件名下载附件

程序参考了别人的"little c 解释器",网上能查到源码,此处将源码以及KEIL下移植的工程发上来
(水平有限,移植后貌似运行不正常,但是语法没错,可以方便查阅代码)
Little C原码.rar (13.16 KB, 下载次数: 74) 2013-7-30 11:20 上传 点击文件名下载附件
little c-keil.rar (106.36 KB, 下载次数: 77) 2013-7-30 11:20 上传 点击文件名下载附件

对编译器有兴趣的同学可以看下:
http://www.amobbs.com/thread-5536737-1-1.html
linucos
2楼-- · 2020-01-23 20:02
lz很强啊?呵呵
bingbingliang
3楼-- · 2020-01-23 23:11
 精彩回答 2  元偷偷看……
loyoid
4楼-- · 2020-01-24 03:30
汗,郁闷了,,,没用过这东西!看不懂
mcu_lover
5楼-- · 2020-01-24 06:46
可以用在一些需要简单脚本的地方。
biqi
6楼-- · 2020-01-24 12:16
还是搞不懂这个东西的作用

一周热门 更多>