菜单

简单函数绘图语言解释器 Python实现—-语法分析篇

一月 10, 2020 - 教程系列

目录和相关资源

简单函数绘图语言解释器 Python实现—-概述&词法分析篇
简单函数绘图语言解释器 Python实现—-语义分析&实现篇
GitHub开源完整代码

前言

上一次篇博客里,我们一起构造了代码的词法分析器,可以看到,经过词法分析器的处理,我们可以将代码中的每一个词语都有效的解析出来,识别出变量、关键字、常数等信息。这也就引出了我们的下一个问题,怎样构造一个语法分析器,使得这些词语能够有效的被组织起来,形成实际具有意义的语句呢?

在编译原理课程里,我们学过了文法和语法树的概念(如果你在看这里但是对这些概念不熟悉,建议回去看一下课本再回来看代码),根据特定的文法,我们可以从产生式生成不同语句,放在这里来讲,就是每一个关键字都有其对应的语法规则,如ORIGIN IS (横坐标,纵坐标);, FOR T FROM 起点 TO 终点 STEP 步长 DRAW(横坐标, 纵坐标);。也就是说,我们需要根据这些语法规则,将词法分析器返回给我们的结果进行组合,将零散的词语组合成有实际意义语句。

词法分析器实现

语法分析器由parser_node.py、parserprocess.py和testparser.py构成。

parser_node.py (构造语法树节点)

该文件给出了语法树节点 ExprNode 的构造方法,在确定每一个运算符的种类后,对 于双目运算符,给该节点分配左右子树,对于函数类型,给该节点分配函数指针和middle内容。构造GetValue方法,针对每一个节点给出其结果的运算方式,将其存储在矩阵中,为后续过程实现画图提供方便。

parserprocess.py

该主要实现了语法分析的过程,其中语法树的构造,语法的识别,报错信息的提 示等功能,是整个函数绘图语言解释器的核心部分,也是最难的部分。 实现该部分的核心思路在于针对不同的语句提供一种构造语法树的方法,针对每一种语句,如 OriginStatement,ScaleStatement,ForStatement构建其语法分析过程,并使得程序可以在读 到错误语法是给出对应行号的报错。

testparser.py

该文件主要功能是测试语法分析的过程是否正确,输入graphic.txt文件,输出构造出的语法树结构,方便进行下一步操作。

可能的运行结果如下:

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注