Как создать язык программирования на Python?

от автора

Пишем свой «Язык программирования» на Python3

1. Лексер

В этой статье мы сделаем, так сказать python2, создание переменных, вывод их в консоль

Если вам зайдёт, то сделаю 2 часть поста 😀

Для начала, определимся с названием языка — к примеру «xnn»
Теперь создадим файл xnn.py и запишем туда основной код:

import sys #Импортируем библиотеку sys import os #Импортируем библиотеку os  dir = os.path.abspath(os.curdir) #Узнаём откуда запущен компилятор p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] - определяем 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) #Записываем все слова в список var     print(var) # $ Выводим список $ 


Что мы делаем:

  1. Импортируем библиотеки os и sys
  2. С помощью os определяем откуда запущен компилятор, (в будущем раскажу зачем)
  3. Создаём путь к файлу + берём сам файл из аргумента — получаем его через sys.argv
  4. Дальше выводим сам путь, с файлом (в будущем это надо будет удалить)
  5. Создаём все зарезервированные слова — пока, нам это не надо, но в будещем понядобиться дял вывода ошибок
  6. Создаём списки для лексера и переменных
  7. Создаём сам лексер, для этого открываем файл, в режиме чтения, обязательно в

    encoding=«UTF-8»

    если этого не сделать, то вместо русских букв, будут иероглифы!

  8. С помощью for ex in read().split() распределяем весь текст на слова и помещаем каждое слово отдельно в ex
  9. Дальше записываем каждое слово в список var
  10. И выведим сам список — в будущем нужно будет удалить вывод :/

Создание файла .xnn

Теперь создадим сам файл который будем парсить, а также изменим способ открытия

Откроем его и запишем туда:

pr = Привет rprint pr 

2. Создание Компилятора

Теперь создадим компилятор!
Для этого дополним наш файл кодом, чтобы получилось вот так:

import sys #Импортируем библиотеку sys import os #Импортируем библиотеку os  dir = os.path.abspath(os.curdir) #Узнаём откуда запущен компилятор p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] - определяем 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) #Записываем все слова в список var     print(var) # $ Выводим список $     a = -1 #Устанавливаем значение на каком сейчас var     for i in var: #Перебираем все значения         a = a + 1 #Добавляем что это значение просмотренно         if i == '=': #Если находим совпадение с "="             vars_[var[a-1]] = var[a+1] #в список vars_ добавляем занчение до и после "="         if i == 'rprint':             let = var[a+1]             for key, value in vars_.items():                 if key == let:                     print(value) except FileNotFoundError:     print('Error! Файл не найден!') 

Что мы делаем?

Мы перебираем все значения в var и при нахождении того или инного зарезервировонного слова, делаем определённые действия

Присваивание переменных

При совпадении i с "=" добавляем в список vars_ значение, до "=" как key, а после "=", как value — таким образом образуя переменную

Вывод переменных

При совпадении i с «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 #Импортируем библиотеку sys import os #Импортируем библиотеку os  dir = os.path.abspath(os.curdir) #Узнаём откуда запущен компилятор p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] - определяем 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) #Записываем все слова в список var     a = -1 #Устанавливаем значение на каком сейчас var     for i in var: #Перебираем все значения         a = a + 1 #Добавляем что это значение просмотренно         if i == '=': #Если находим совпадение с "="             vars_[var[a-1]] = var[a+1] #в список vars_ добавляем занчение до и после "="         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
Полная информация по установке есть по этой ссылке

Введём в консоль:

auto-py-to-exe

pip install auto-py-to-exe auto-py-to-exe 

Запустится браузер. Выбираем там путь к файлу и One File

Мои Предустоновка

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\xnn.exe».

ссылка на оригинал статьи https://habr.com/ru/post/497402/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *