
我们用Python3编写“编程语言”
1. Lexer
可以说,在本文中,我们将使用python2创建变量并将其输出到控制台
如果涉及到您,那么我将做该帖子的第2部分:D
首先,让我们确定语言的名称,例如“ xnn”,现在创建xnn.py文件并在其中编写主要代码:import sys
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[1])
print(p)
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//']
var = []
vars_ = {}
with open(p, 'r', encoding="UTF-8") as f:
for ex in f.read().split():
var.append(ex)
print(var)
我们在做什么:- 导入操作系统和sys库
- 使用os,我们确定从何处启动编译器(以后我将告诉您原因)
- 创建文件的路径+从参数中获取文件本身-我们通过sys.argv获取文件
- 接下来,我们显示路径本身以及文件(以后将需要删除该路径)
- 我们创建了所有保留字-目前,我们不需要它,但是在将来,我们将其用于错误输出
- 创建词法分析器和变量的列表
- 我们创建了词法分析器本身,为此,我们以读取模式打开文件,请确保
编码=“ UTF-8”
如果不这样做,则会出现象形文字,而不是俄语字母! - 在read()中使用ex进行拆分(),我们将所有文本分散成多个单词,并将每个单词分别放在ex
- 接下来,将每个单词写到var列表中
- 我们将显示列表本身-将来有必要删除输出:/
创建一个.xnn文件
现在,我们将创建要解析的文件本身,并更改
打开方式,将其打开并写入其中:pr =
rprint pr
2.创建一个编译器
现在创建一个编译器!为此,我们用代码补充文件,以使结果如下所示:import sys
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[1])
print(p)
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//']
var = []
vars_ = {}
try:
with open(p, 'r', encoding="UTF-8") as f:
for ex in f.read().split():
var.append(ex)
print(var)
a = -1
for i in var:
a = a + 1
if i == '=':
vars_[var[a-1]] = var[a+1]
if i == 'rprint':
let = var[a+1]
for key, value in vars_.items():
if key == let:
print(value)
except FileNotFoundError:
print('Error! !')
我们在做什么?我们遍历var中的所有值,当找到一个或另一个保留字时,我们将执行某些操作变量分配
如果我与“ =”一致,则将一个值添加到vars_ list中,在“ =”之前添加键,并在“ =”之后添加值-从而形成一个变量可变输出
如果我匹配“ rprint”,我们在列表vars_中查找该变量的匹配项,这是通过我们的朋友var列表获得的。找到后,显示该变量的值行动中的工作
为了编译文件,请在cmd中输入命令数据:cd path/to/files
python xnn.py prog.xnn
输出为:
C:\Users\Hoopengo\Desktop\xnn\prog.xnn
['pr', '=', '', 'rprint', 'pr']
3.在.exe中进行编译
创建文件夹的副本并编辑xnn.py文件import sys
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[1])
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//']
var = []
vars_ = {}
try:
with open(p, 'r', encoding="UTF-8") as f:
for ex in f.read().split():
var.append(ex)
a = -1
for i in var:
a = a + 1
if i == '=':
vars_[var[a-1]] = var[a+1]
if i == 'rprint':
let = var[a+1]
for key, value in vars_.items():
if key == let:
print(value)
except FileNotFoundError:
print('Error! !')
安装auto-py-to-exe此链接提供了完整的安装信息,让我们进入控制台:自动执行pip install auto-py-to-exe
auto-py-to-exe
浏览器启动。选择文件的路径,然后选择一个文件。
4.创建安装程序
在复制的文件夹中,创建bat.py文件:
import os
with open('path\\xnn.exe', 'r', encoding='UTF-8') as f:
lean = f.read()
directory_folder = r"C:\\Windows\\System32\\xnn.exe"
folder_path = os.path.dirname(directory_folder)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
with open(directory_folder, 'w', encoding='UTF-8') as file:
file.write(lean)
之后,将其编译为.exe并将其放入同一目录,它应如下所示:
5.安装
现在安装,要执行此操作,请打开文件bat.exe,然后完成安装,请重新启动控制台并输入:cd path/to/file
xnn prog.xnn
我们得到:
如果显示“ xnn不是内部命令”,则将xnn.exe文件自己添加到“ C:\ Windows \ System32 \”文件夹中。