问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python怎样使用解释器

发布网友 发布时间:2022-04-24 16:10

我来回答

1个回答

热心网友 时间:2022-04-07 08:34

大学里计算机科学最吸引我的地方就是编译器。最神奇的是,编译器是如何读出我写的那些烂代码,并且还能生成那么复杂的程序。当我终于选了一门编译方面的课程时,我发现这个过程比我想的要简单得多。

在本系列的文章中,我会试着通过为一种基本命令语言IMP写一个解释器,来展示这种简易性。因为IMP是一个简单广为人知的语言,所以打算用 Python写这个解释器。Python代码看起来很像伪代码,所以即使你不认识 Python,你也能理解它。解析可以通过一套从头开始实现的解析器组合完成(在本系列的下一篇文章中会有解释)。除了sys(用于I/O)、re(用于解析正则表达式)以及unittest(用于确保一切工作正常)库,没有使用其他额外的库。

IMP 语言

在开始写之前,我们先来讨论一下将要解释的语言。IMP是拥有下面结构的最小命令语言:

赋值语句(所有变量都是全局的,而且只能存储整数):

Python

1

x := 1

条件语句:

Python

1

2

3

4

5

if x = 1 then

y := 2

else

y := 3

end

while循环:

Python

1

2

3

while x < 10 do

x := x + 1

end

复合语句(分号分隔):

Python

1

2

x := 1;

y := 2

OK,所以它只是一门工具语言,但你可以很容易就把它扩展成比Lua或python更有用的语言。我希望能把这份教程能保持尽量简单。

下面这个例子是计算阶乘的程序:

Python

1

2

3

4

5

6

n := 5;

p := 1;

while n > 0 do

p := p * n;

n := n - 1

end

IMP没有读取输入的方式,所以初始状态必须是在程序最开始写一系列的赋值语句。也没有打印结果的方式,所以解释器必须在程序的结尾打印所有变量的值。

解释器的结构

解释器的核心是「中间表示」(Intermediate representation,IR)。这就是如何在内存中表示IMP程序。因为IMP是一个很简单的语言,中间表示将直接对应于语言的语法;每一种表达和语句都有对应的类。在一种更复杂的语言中,你不仅需要一个「语法表示」,还需要一个更容易分析或运行的「语义表示」。

解释器将会执行三个阶段:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 初学python Python reversed函数 我手机好像烧屏了有阴影,大概手机还能用多少时间 什么是文化程度?学历吗?这个问题提的没水平! 学位.学历.文化程度怎么分呢 问题:文化程度,学历,学位如何区分? 学历,文凭,文化程度 这三个词有什么区别? 学历和文化程度有什么不同? 文化程度和学历,学位有区别吗 成人高考的文化程度都有什么分类 photoshop cs6怎么像这样把脸抹掉 ps cs6怎么去色和反相 请问这个激光的效果在photoshop cs6 里怎么做啊? ps cs6怎样去掉图片中的黑色印? 新版ps cs6怎么去斑详 我的win7旗舰版进入boot后怎么重装?求解答,感谢! 正版WIN7旗舰版如何重装系统? 三星win7旗舰版怎么重装系统 请问世界上最大的蜈蚣是什么品种~哪一国的? 抖音小店顾客下单我可以去别人那里下吗? 如何使用 Python 访问注册表 python的内存管理机制 python3.x版本的保留字总数是什么? python怎么将数组转换为矩阵 如何在wi10注册表找到python位置 请教python中调用DeviceIoControl的一个问题 python习题(算法) 编程c++和python的区别 彩霞为什么是红色的? 傍晚的时候彩霞为什么是红色的 为什么晚霞是红色的? 明朝彩霞红上一句是什么? 彩霞红,腾身转觉,打一个什么数字? 什么青什么红什么秋什么冬? 四水五湖彩霞红三个数字 描写“彩霞”的诗句有哪些? 四水五湖彩霞红,中心无二未必兴。猜是什么生肖 什么青,什么红? 描写“傍晚丹霞(或彩霞)似锦”的诗词有哪些? 晚霞红似火的下一句话