ljt80158015 发表于 2017-8-17 13:38:08

Picoc C语言解释器



Picoc是google开源代码项目中看到的一个项目,其初衷貌似是要做一个在小的嵌入设备上的C解释器。它的核心代码只有3500行左右,可读性不错,虽然没有实现完整的ISO C标准,基本的C运行库还是具备了。
picoc代码上看,基本有如下几块:lex词法解析,table一个基本数据结构(用于存放变量),是个字符串hash表,heap管理内存分配(包括了stack frame的实现), type做类型管理(基本型别和程序自定义的struct,typedef等),expression做表达式解析,variable变量管理分配释放栈帧。
picoc的定位是一个解释器,它的解析和代码运行是在同一块代码块里做

PicoC是一个非常小的C解释器的脚本。它最初是作为一个无人机的飞行系统板上的脚本语言。它也非常适合于其他机器人,嵌入式和非嵌入式应用。
核心的C源代码是大约4500行代码。它并不打算成为一个完整的ISO C实现的,但它拥有所有的必需品。在编译时,只需要几K的代码空间也很不遗余力的数据空间。这意味着,在小型嵌入式设备,它可以很好地工作。这也是一个有趣的例子,如何创建一个非常小的语言实现,同时仍保持代码的可读性。
picoc已经过测试的x86-32,x86-64的的PowerPC,ARM,以UltraSPARC,HP-PA和Blackfin处理器上,并很容易地移植到新的目标。


项目地址,有文档和源码:
GOOGLE https://code.google.com/p/picoc/
GitHubhttps://github.com/larryhe/tiny-c-interpreter
SVN 地址,貌似还有人在开发当中,但是只有 win32版本可以编译过去,变化比较大...
# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://picoc.googlecode.com/svn/trunk/ picoc-read-only







tongdayusu 发表于 2017-8-17 14:15:01

估计学生及编程爱好者比较喜欢这个。整天忙于项目的,不敢轻易尝试这玩意儿了。

ljt80158015 发表于 2017-8-17 14:30:28

tongdayusu 发表于 2017-8-17 14:15
估计学生及编程爱好者比较喜欢这个。整天忙于项目的,不敢轻易尝试这玩意儿了。 ...



google 的代码还不可信?

yj_yulin 发表于 2017-8-17 14:53:49

ljt80158015 发表于 2017-8-17 14:30
google 的代码还不可信?

显然不是 google的,不过代码也有不少人用,主要是性能不是非常好,不过脚本嘛,也就图灵活啦。
你这个代码也太旧了。
https://github.com/zsaleeba/picoc
https://github.com/jpoirier/picoc

ljt80158015 发表于 2017-8-17 15:29:45

yj_yulin 发表于 2017-8-17 14:53
显然不是 google的,不过代码也有不少人用,主要是性能不是非常好,不过脚本嘛,也就图灵活啦。
你这个代 ...




https://github.com/zsaleeba/picoc
https://github.com/jpoirier/picoc

这两个有什么区别?新版本我试了下和 老的没什么区别

hanshiruo 发表于 2017-8-17 22:19:02

记号      

yick 发表于 2017-8-18 08:57:47

记号      

ljt80158015 发表于 2017-8-18 14:23:02

yj_yulin 发表于 2017-8-17 14:53
显然不是 google的,不过代码也有不少人用,主要是性能不是非常好,不过脚本嘛,也就图灵活啦。
你这个代 ...



如何防止脚本中有while(1)中没有sleep,导致cpu 100%?


在脚本中处理肯定不合适,毕竟脚本很多人写。


yj_yulin 发表于 2017-8-18 16:50:13

ljt80158015 发表于 2017-8-18 14:23
如何防止脚本中有while(1)中没有sleep,导致cpu 100%?




rtos中可以把解释器任务定时开一段时间,时间到暂停此任务

ljt80158015 发表于 2017-8-18 16:52:36

yj_yulin 发表于 2017-8-18 16:50
rtos中可以把解释器任务定时开一段时间,时间到暂停此任务


ucos是通过sleep让出时间片的

你必须在 picoc中 添加sleep 才能做到。关键这个sleep 添加在哪呢?

yj_yulin 发表于 2017-8-18 21:37:12

本帖最后由 yj_yulin 于 2017-8-18 21:38 编辑

ljt80158015 发表于 2017-8-18 16:52
ucos是通过sleep让出时间片的

你必须在 picoc中 添加sleep 才能做到。关键这个sleep 添加在哪呢?


task 可以pause,resume啊,跟picoc没什么关系,它死循环没有什么关系呢

zack_cf 发表于 2017-8-19 09:53:40

实际编译了用过吗?嵌入式平台或PC平台

huangqi412 发表于 2017-8-19 12:15:35

看有没移植好的

farmerzhangdl 发表于 2017-8-19 14:56:10

这个看起来比脚本好玩

Excellence 发表于 2017-8-19 16:34:04

怎么玩?感兴趣

ljt80158015 发表于 2017-8-20 09:43:59

huangqi412 发表于 2017-8-19 12:15
看有没移植好的

独乐乐不如众乐乐,Picoc C语言解释器的STM32平台移植。
https://www.amobbs.com/thread-5525685-1-1.html
(出处: amoBBS 阿莫电子论坛)

ljt80158015 发表于 2017-8-20 09:45:23

Excellence 发表于 2017-8-19 16:34
怎么玩?感兴趣


linux下直接编译运行,非常棒,但是效率很低,只有编译程序的速度是 解释方式运行速度的280 倍


但是实现简单的应用问题不大


ljt80158015 发表于 2017-8-20 09:45:47

zack_cf 发表于 2017-8-19 09:53
实际编译了用过吗?嵌入式平台或PC平台



linux 平台可以直接编译 运行


lkm_unication 发表于 2017-8-21 12:11:37

mark一下,嵌入式 C 解释器,感谢LZ的分享!{:handshake:}

落叶知秋 发表于 2017-8-21 14:52:38

ljt80158015 发表于 2017-8-20 09:45
linux下直接编译运行,非常棒,但是效率很低,只有编译程序的速度是 解释方式运行速度的280 倍




效率的差距是原理上决定的,编译型和解析型语言的速度也是差很远的,基本无解,但作为应用是没有速度瓶颈的

解析型语言如BASIC、Python这些,还是照样很受欢迎的,简单嘛,搞个解析器和编辑器就可以编程玩了,编译型的还要搞译码啥的

GitHub上也有一些其他语言的解析器,基本是其他开发者写着玩的,多半不考虑用在产品上,所以,用来学习还是很好的,但产品还是要自己再梳理
页: [1]
查看完整版本: Picoc C语言解释器