代码拉取完成,页面将自动刷新
个人学习编译原理时找到的项目。此编程语言是在这位CSDN博主 写的解释器代码的基础上进行修改得来的。这位博主的代码基本完整实现了超简单的编译器,但是没有函数调用栈的内容。增加了函数调用栈等内容。
个人粗浅的尝试加了一下函数的调用栈。各位开发者若有更好的方式,欢迎修改与交流。
基于Python开发的试验性、解释性编程语言,支持变量、函数、递归调用等,有着较为完整的面向过程特性,不支持面向对象功能及数组容器。
这个编程语言的目的是实验编译器的前端,后端则是直接调用Python语言的相关功能进行运算。
显然,这个编程语言不能解决任何实际问题,但是可供各位参考、修改。以及可能的话,还可以用来交编译原理的作业。
pip install ply
运行run_lexer.py可以运行抽象语法树以及词法分析
运行run.py则可以运行整段代码。
读取的文件类型为.ply结尾。
此为一种动态类型的编程语言。只支持字符串、整数、浮点数三种基本的数据类型。标识符要以字母或下划线开头,并且只含有字母、数字、下划线。
a = 1 # 定义整数
b = a + 2 - 3.4 * 5.6 / 7.8 # 浮点数运算
print('b = ')
# 这是注释
>
>=
==
<=
<
function hello(){
print('hello world!')
}
function add(aaa,b){
cdf = aaa + b
hello() # 函数中允许调用其他函数
return cdf
}
g = add(1,2)
print(g)
# 结果为 3
-calculator # 是PLY库的基本应用,可以通过这个例子来熟悉PLY语法解析库。
-pyhandylang
|----__init__.py
|----Ast.py # 定义了抽象语法树。
|----Lexer.py # 定义了词法解析器匹配规则
|----Parser.py # 定义了语法解析器所在的类
|----var_stack.py # 定义了调用栈所在的类
-run.py # 执行这个文件,可以运行词法分析和语法分析。
-run_lexer.py # 执行这个文件,只运行词法分析
首先,调用python ply包中的yacc包将其生成AST抽象语法树。
执行时,调用抽象语法树每个单元的exe()方法即可递归执行。
PLY库官方文档,及其中文翻译
下述链接中的中文翻译,私以为不错,很值得参考。
另外,为了熟悉PLY库,本仓库的calculator文件夹下有相关内容。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。