2 Star 5 Fork 0

幽径吴宫/Python PLY 实验性编程语言

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

PyHandyLang 试验性编程语言

简介

由来

个人学习编译原理时找到的项目。此编程语言是在这位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官方文档

  • 另外,为了熟悉PLY库,本仓库的calculator文件夹下有相关内容。

空文件

简介

一个用Python PLY库实现的简易编程语言,版权见readme.md 可以根据PLY自由定制语法特性。 展开 收起
Python
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/mole-h-6011/example-of-python-ply-parsing.git
git@gitee.com:mole-h-6011/example-of-python-ply-parsing.git
mole-h-6011
example-of-python-ply-parsing
Python PLY 实验性编程语言
master

搜索帮助