搜索
bottom↓
回复: 28

编写自己的编译器(强烈推荐)

  [复制链接]

出0入10汤圆

发表于 2017-9-18 19:13:29 | 显示全部楼层 |阅读模式
本帖最后由 10xjzheng 于 2017-9-18 21:29 编辑

每天我们都在用编译器,当你用编译器或者解释器的时候,你是否想过这些软件在背后都做了什么?
如果想知道为什么那就学习我推荐的这系列博文吧,相当不错。文中用python一步一步实现了一个解
释器(解释器和编译器的区别可以看作一个是on-line,一个是off-line),这应该是我见过最用心的教
程了。文章从简单的数学表达式——》分析简单的程序——》构建抽象语法树——》语法检查——》函
数作用域实现。跟着实现这系列的博文,你再回去看那些写得很抽象的龙书,鲸书...就没有那么抽象了。
英文版:https://ruslanspivak.com/lsbasi-part1/  
中文版:https://www.oschina.net/translat ... -interpreter-part-1

作者真的很用心,流程图和很多幽默配图都是自己手画然后扫描上来,一步步跟着走肯定学得会的,
有些人看到是python可能就绕着走了,我觉得这就不对了,掌握多门语言,多一种解决问题的思路,
平时遇到一些问题给自己写写小工具要好,生为电工,就是要不断地学习,而且是内外兼修。stay
hungry,stay foolish!



本帖子中包含更多资源

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

x

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

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入25汤圆

发表于 2017-9-19 00:37:59 来自手机 | 显示全部楼层
本帖最后由 XIVN1987 于 2017-9-19 01:02 编辑

我也推荐个类似的:MicroPython实现源码
官网:http://www.micropython.org/
源码:https://github.com/micropython/micropython

它是用C语言写的在单片机上运行的Python 3 实现,已经移植到STM32、CC3200、ESP8266、ESP32、MK26等多种单片机上

其源码中可以学习到词法解析器lexer、语法解析器parser、编译器compiler、字节码bytecode、虚拟机VM、垃圾收集器GC等很多编译器、解释器相关技术

而且这个编译器/解释器不是一个教学用的demo,而是一个高度兼容python 3的实现,,除了学习相关知识(以及C语言编程)外,还具有一定的实际使用价值

而且MicroPython不仅实现了Python标准,还针对单片机控制编程做了一些扩展,,比如它不仅可以将python函数编译成字节码在虚拟机中运行,还可以直接编译成native机器码运行,甚至直接在python函数中写汇编语句

当然了,,学这个也有一个非常巨大的缺点:只有源代码,没有学习教程 ,只能自己读代码学习(希望某位大神能写本教材吧)

下面是一份MicroPython作者的演讲PDF,及PDF中的一张截图:

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2017-9-18 19:16:22 | 显示全部楼层
还不错  研究研究 然后跟着坐下

出0入442汤圆

发表于 2017-9-18 19:56:24 来自手机 | 显示全部楼层
哈哈,用有穷状态机做解释器,当年上学时写过。

出40入42汤圆

发表于 2017-9-18 20:00:01 | 显示全部楼层
谢谢分享~

出0入25汤圆

发表于 2017-9-18 20:02:35 来自手机 | 显示全部楼层
编译原理不就是这么一门课程吗

出0入0汤圆

发表于 2017-9-18 20:12:40 来自手机 | 显示全部楼层
看看,学习一下

出0入0汤圆

发表于 2017-9-18 20:38:23 来自手机 | 显示全部楼层
看看,谢谢分享

出0入0汤圆

发表于 2017-9-18 20:41:15 | 显示全部楼层
很好,多了解,挺有好处。

出0入0汤圆

发表于 2017-9-18 20:54:07 | 显示全部楼层
这个可以当个兴趣爱好来看看,对自己写程序有一些启发。没错,里面就是一个大的状态机

出0入4汤圆

发表于 2017-9-18 21:02:26 | 显示全部楼层
Dude, this is cool. Thank you for sharing.

出0入0汤圆

发表于 2017-9-18 21:06:34 | 显示全部楼层
谢谢分享                             

出0入0汤圆

发表于 2017-9-18 22:19:35 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2017-9-18 22:55:49 | 显示全部楼层
考虑后端用什么?这个只是个前端的语法、语义解析吧?

出0入0汤圆

发表于 2017-9-19 05:45:45 来自手机 | 显示全部楼层
研究编译器的都是大神

出0入0汤圆

发表于 2017-9-19 08:58:48 来自手机 | 显示全部楼层
不错,不过我更喜欢python爬数据

出0入8汤圆

发表于 2017-9-19 09:09:35 | 显示全部楼层
关注一下,谢谢分享。

出0入0汤圆

发表于 2017-9-19 09:22:12 | 显示全部楼层
不错,值得看看。

出0入0汤圆

发表于 2017-9-19 09:23:28 | 显示全部楼层
要是有C#版就好了

出0入0汤圆

发表于 2017-9-19 09:28:22 | 显示全部楼层
非常不错,一定好好看看

出0入0汤圆

发表于 2017-9-19 09:58:22 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2017-9-19 10:13:25 | 显示全部楼层
thank you, good articles

出0入0汤圆

发表于 2017-9-19 10:53:33 | 显示全部楼层
  File "calcl.py", line 2
    def __init__(self, type, value):
    ^
IndentationError: unexpected indent

刚用python2.7,报错,不知道py3会不会,没装py3

出0入0汤圆

发表于 2017-9-19 10:59:04 | 显示全部楼层
python很不错,我们公司的自动化测试平台都是python写的。

出0入10汤圆

 楼主| 发表于 2017-9-19 11:02:23 | 显示全部楼层
heicnhei3 发表于 2017-9-19 10:53
File "calcl.py", line 2
    def __init__(self, type, value):
    ^

哇,老兄,缩进错了,复制的时候长点心。

出0入10汤圆

 楼主| 发表于 2017-9-19 11:03:10 | 显示全部楼层
XIVN1987 发表于 2017-9-19 00:37
我也推荐个类似的:MicroPython实现源码
官网:http://www.micropython.org/
源码:https://github.com/mic ...

谢谢分享!

出0入0汤圆

发表于 2017-10-12 13:21:40 | 显示全部楼层
正在由C转到python,这个资料很好

出0入0汤圆

发表于 2017-10-12 15:11:23 | 显示全部楼层
留个爪印。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-27 07:06

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

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