编译原理 python_<编译原理 - 函数绘图语言解释器(1)词法分析器 - python>

本文介绍了如何使用Python实现一个函数绘图语言的解释器,涉及词法分析器的创建。词法分析器通过识别语句中的关键词、运算符、函数等,将其转化为记号流。文章提供了词法分析器的代码实现,包括构造枚举类、记号类和符号表,并展示了测试用例的运行结果。
摘要由CSDN通过智能技术生成

背景

编译原理上机实现一个对函数绘图语言的解释器 - 用除C外的不同种语言实现

解释器分为三个实现块:

词法分析器:用于识别一条语句中的关键词是否符合预先定义的规则。

语法分析器:用来确定一条语句是否满足语法规则。

解释器:用来确定满足语法规则的句子,在意思上是否符合要求。

设计思路:

设计记号:词法分析器读取一个序列并根据构词规则把序列转化为记号流

定义一个字典:把所有符合一个模式的保留字、常量名、参数名、函数名等放进字典。字典是个数组,其元素的类型和记号的类型相同

设计程序的结构,具体见下面的代码

用Pycharm写了三个.py文件:

scannerclass.py

scannerfunc.py

scannermain.py

输入流是序列(存储在.txt文本),输出流是“字典”(一个个识别好的记号对象)

测试文本序列(1): FOR T FROM 0 TO 2*PI STEP PI/50 DRAW(COS(t),sin(t));

测试文本序列(2):

//------------------This is zhushi!!------------------------ ORIGIN IS (100,300); // Sets the offset of the origin ROT IS 0; // Set rotation Angle. SCALE IS (1,1); // Set the abscissa and ordinate scale. FOR T FROM 0 TO 200 STEP 1 DRAW (T,0); // The trajectory of the x-coordinate. FOR T FROM 0 TO 150 STEP 1 DRAW (0,-T); // The trajectory of the y-coordinate. FOR T FROM 0 TO 120 STEP 1 DRAW (T,-T); // The trajectory of the function f[t]=t. ```

函数绘图语言介绍

语句介绍

31eabe02907aac89a4dfe0279661f9cf.png

函数绘图源程序举例介绍

3a831670dc2570ecb710d94fba83d735.png

画出的图形介绍

e0d915b948f49669ae695bcb6e9e3a8b.png

Step 1 :scannerclass.py - 构造枚举类 记号类 符号表

from enum import Enum

import math

Token_Type = Enum('Token_Type', ('ORIGIN', 'SCALE', 'ROT', 'IS', 'TO', 'STEP', 'DRAW', 'FOR', 'FROM', #保留字

'T', #参数

'SEMICO', 'L_BRACKET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值