编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

17 | Python编译器(一):如何用工具生成编译器?

CST转换成AST
ASDL语言定义AST结构
抽象语法树
具体语法树
pgen工具生成解析表
EBNF语法编写的Python语法规则文件
自顶向下算法
词法规则冲突解决
Tokenizer.c
转换过程
AST
解析树(CST)
语法分析功能
词法分析功能
GDB
Jython
PyPy
CPython
便于扩展
利用开源世界的二进制库
丰富的现代语言特性
简单易学的语法
解析树和AST
词法分析和语法分析
调试编译源代码
编译器实现
优点
Python编译器

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
最近几年,Python 在中国变得越来越流行,我想可能有几个推动力:第一个是因为人工智能热的兴起,用 Python 可以很方便地使用流行的 AI 框架,比如 TensorFlow;第二个重要的因素是编程教育,特别是很多面对青少年的编程课程,都是采用的 Python 语言。
不过,Python 之所以变得如此受欢迎,虽然有外在的机遇,但也得益于它内在的一些优点。比如说:
Python 的语法比较简单,容易掌握,它强调一件事情只能用一种方法去做。对于老一代的程序员来说,Python 就像久远的 BASIC 语言,很适合作为初学者的第一门计算机语言去学习,去打开计算机编程这个充满魅力的世界。
Python 具备丰富的现代语言特性,实现方式又比较简洁。比如,它既支持面向对象特性,也支持函数式编程特性,等等。这对于学习编程很有好处,能够带给初学者比较准确的编程概念。
我个人比较欣赏 Python 的一个原因,是它能够充分利用开源世界的一些二进制的库,比如说,如果你想研究计算机视觉和多媒体,可以用它调用 OpenCV 和 FFmpeg。Python 跟 AI 框架的整合也是同样的道理,这也是 Python 经常用于系统运维领域的原因,因为它很容易调用操作系统的一些库。
最后,Python 还有便于扩展的优势。如果你觉得 Python 有哪方面能力的不足,你也可以用 C 语言来写一些扩展。而且,你不仅仅可以扩展出几个函数,你还能扩展出新的类型,并在 Python 里使用这些新类型。比如,Python 的数学计算库是 NumPy,它的核心代码是用 C 语言编写的,性能很高。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Python编译器内部工作原理深入探讨,从词法分析和语法分析入手,带领读者了解Python编译器的运行过程。文章介绍了Python编译器的实现方式,以及通过调试工具GDB跟踪Python编译器的执行过程。此外,还介绍了Python的词法分析功能,展示了如何通过有限自动机将字符串转换为Token。读者将能够了解Python编译器的内部工作原理,以及对词法分析和语法分析的实现方式有更深入的了解。文章还介绍了Python的语法分析特点,采用的是LL(1)算法,通过具体例子展示了语法解析的过程。此外,还讨论了解析树(Parse Tree)与AST的区别。整体内容深入浅出,适合对Python编译器内部原理感兴趣的读者阅读。文章还介绍了Python的词法分析功能,展示了如何通过有限自动机将字符串转换为Token。读者将能够了解Python编译器的内部工作原理,以及对词法分析和语法分析的实现方式有更深入的了解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • reverse
    老师 #define Tuple(a0, a1, a2, a3, a4, a5, a6) _Py_Tuple(a0, a1, a2, a3, a4, a5, a6) expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); 这些代码中操作的入参好像都是固定的,感觉和寄存器有很大的关系
    2020-08-20
    1
  • ifelse
    比起java编译器,感觉python的很low
    2022-01-14
  • 骨汤鸡蛋面
    老师,python等是解释执行的,支持shell 端一次输入一行代码。这种一行代码一行代码的解释执行和一个完整代码的一次性编译执行主要区别可以介绍下嘛?
    2021-01-30
  • Jacob.C
    请问文中 lex 函数是哪里来的,没查到相关包哦
    2020-09-16
  • Aaron Cheung
    很赞的分享 获益匪浅
    2020-09-14
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部