搜索
bottom↓
回复: 19

Picoc C语言解释器

[复制链接]

出0入0汤圆

发表于 2017-8-17 13:38:08 | 显示全部楼层 |阅读模式


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/
GitHub  https://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







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入8汤圆

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

出0入0汤圆

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



google 的代码还不可信?

出0入0汤圆

发表于 2017-8-17 14:53:49 | 显示全部楼层
ljt80158015 发表于 2017-8-17 14:30
google 的代码还不可信?

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

出0入0汤圆

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




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

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

出0入0汤圆

发表于 2017-8-17 22:19:02 | 显示全部楼层
记号        

出0入0汤圆

发表于 2017-8-18 08:57:47 | 显示全部楼层
记号        

出0入0汤圆

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



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


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


出0入0汤圆

发表于 2017-8-18 16:50:13 | 显示全部楼层
ljt80158015 发表于 2017-8-18 14:23
如何防止脚本中有  while(1)中没有sleep,导致cpu 100%  ?

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

出0入0汤圆

 楼主| 发表于 2017-8-18 16:52:36 | 显示全部楼层
yj_yulin 发表于 2017-8-18 16:50
rtos中可以把解释器任务定时开一段时间,时间到暂停此任务


ucos是通过sleep让出时间片的

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

出0入0汤圆

发表于 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没什么关系,它死循环没有什么关系呢

出0入0汤圆

发表于 2017-8-19 09:53:40 | 显示全部楼层
实际编译了用过吗?嵌入式平台或PC平台

出0入0汤圆

发表于 2017-8-19 12:15:35 来自手机 | 显示全部楼层
看有没移植好的

出0入0汤圆

发表于 2017-8-19 14:56:10 | 显示全部楼层
这个看起来比脚本好玩

出0入0汤圆

发表于 2017-8-19 16:34:04 来自手机 | 显示全部楼层
怎么玩?感兴趣

出0入0汤圆

 楼主| 发表于 2017-8-20 09:43:59 | 显示全部楼层

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

出0入0汤圆

 楼主| 发表于 2017-8-20 09:45:23 | 显示全部楼层


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


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


出0入0汤圆

 楼主| 发表于 2017-8-20 09:45:47 | 显示全部楼层
zack_cf 发表于 2017-8-19 09:53
实际编译了用过吗?嵌入式平台或PC平台



linux 平台可以直接编译 运行


出0入0汤圆

发表于 2017-8-21 12:11:37 | 显示全部楼层
mark一下,嵌入式 C 解释器,感谢LZ的分享!

出40入42汤圆

发表于 2017-8-21 14:52:38 | 显示全部楼层
ljt80158015 发表于 2017-8-20 09:45
linux下直接编译运行,非常棒,但是效率很低,只有编译程序的速度是 解释方式运行速度的  280 倍

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

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

GitHub上也有一些其他语言的解析器,基本是其他开发者写着玩的,多半不考虑用在产品上,所以,用来学习还是很好的,但产品还是要自己再梳理
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 07:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表