Итак, вы хотите создать свой собственный язык программирования, но не знаете, с чего начать? Вот как я создал свой собственный язык программирования под названием TEN ко Дню отца.

P.S - Вы тоже можете!

Для начала вам нужно убедиться, что у вас установлен Python. Вы также можете обновить его до Python 3.X. Я бы порекомендовал 3.9, так как это последняя версия для этой статьи.

Чтобы установить Python, просто перейдите на www.python.org, откройте раздел загрузки на панели навигации и нажмите кнопку Python 3.9.5:

Запустите установщик и следуйте всплывающим инструкциям.

Теперь нам нужно установить несколько пакетов python, которые позволят нам преобразовать наши файлы python в файлы exe. Шаги взяты из этого ответа на переполнение стека.

Откройте новое окно командной строки и введите следующую команду:

pip install cx_Freez

Затем введите следующую команду:

pip install idna

Эти 2 библиотеки необходимы для преобразования файлов .py в файлы .exe.

Теперь, когда это решено, нам нужно приступить к планированию нашего пользовательского языка. Для простоты мы будем создавать язык программирования на основе стека.

Язык программирования на основе стека - это язык, работающий в стеке. Сначала вы вводите некоторые значения, а затем выполняете операцию над этими значениями. Например, чтобы сложить 2 числа, вы должны ввести следующий код:

number1 number2 +

number1 добавляет первое число в стек, затем number2 добавляет второе число в стек. Итак, наш стек теперь содержит number1 и number2. Затем, набрав +, мы добавляем 2 числа в стек. Итак, конечным результатом этого является значение number1+number2 в стеке.

Как следует из названия, весь язык работает в стеке, поэтому нам нужно сначала определить переменную, содержащую наш стек. Для этого импортируйте пакет deque (произносится колода) из библиотеки collections:

from collections import deque
q = deque()

Следующий шаг - ну, сейчас вы мало что можете сделать, так как вы серьезно не задумывались о синтаксисе своего языка. Настоящий следующий шаг - отойти от Python и открыть черный текстовый файл. Вам необходимо приступить к созданию синтаксиса вашего языка программирования.

Подумайте, как вы хотите, чтобы это выглядело. Как вы будете выполнять основные операции с числами? Как вы будете добавлять предметы в стопку? Как бы вы дали определение строкам?

Если вы думаете об этом достаточно долго, у вас должно быть как минимум 10 различных команд, не считая базовой числовой арифметики. В противном случае вы просто строите калькулятор.

Теперь, когда у вас есть продуманный синтаксис (и поверьте мне, вы еще не до конца продумали его, потому что можете держать пари, что синтаксис будет меняться с течением времени, когда вы создадите этот язык), мы можем начать нашу настоящую работу. с питоном.

Для ясности назовем язык, который мы собираемся создать, ПОЛЬЗОВАТЕЛЬСКИМ.

Нам нужно открыть файл, содержащий наш ПОЛЬЗОВАТЕЛЬСКИЙ скрипт. Но прежде чем мы откроем файл, нам нужно его имя. Если вы когда-либо компилировали сценарий Python, вы знаете, что набираете команду python <filename>.py. На самом деле мы передаем строку <filename.py> в python.exe, а затем python.exe компилирует этот файл. Python фактически позволяет нам компилировать файлы Python с переданными дополнительными аргументами: python <filename>.py arg1 arg2 …. Затем аргументы arg1, arg2,… ​​передаются в наш скрипт python, который может использовать эти аргументы. Чтобы получить доступ к этим аргументам, мы используем sys.argv. sys.argv - это список, содержащий каждый дополнительный аргумент. На данный момент нам будет передан только 1 аргумент, имя файла CUSTOM скрипта:

from collections import deque
filename = sys.argv[1]
q = deque()

Затем мы читаем все содержимое файла в переменную с именем contents.

import sys
from collections import deque
filename = sys.argv[1]
file = open(filename, 'r')
contents = file.read() # Reads the entire file as a single string
q = deque()

Я предполагаю, что в вашем языке программирования не будет переменных, поскольку доступ к ним может быть настоящей проблемой. Вы можете проверить мою TEN страницу Github (ссылка выше), чтобы увидеть, как я управлял назначением переменных и доступом.

Теперь почти все наши переменные выполнены. Теперь нам нужно перебирать код символ за символом. Я сделал каждую из моих команд отдельным символом, чтобы можно было перебирать символ за символом. Вы можете использовать строковый токенизатор, но это действительно не нужно. (К тому же создание запутанного языка программирования - это все в моде)

Во-первых, код, который выполняет итерацию по каждому символу:

i = 0
while (i < len(contents):
    # Some code here

Давайте начнем с простого, с проверки, определяет ли пользователь строку. Предположим, пользователь открывает строку с и закрывает с . Тогда мы бы написали следующее:

if (contents[i] == "\""):
    j = i
    while (contents[j] != "\'"):
        j += 1
    q.appendleft(contents[i+1:j])
    i = j

Так что просто такие базовые вещи делают код намного лучше!

Вот образец, который позволяет пользователям только добавлять строки и распечатывать их. Используя то же определение строки, что и выше, и позволяя ; быть командой для печати вершины стека:

import sys
from collections import deque
filename = sys.argv[1]
file = open(filename, "r")
contents = file.read()
i = 0
while i < len(contents):
    if (contents[i] == "\""):
        j = i
        while (contents[j] != "\'"):
            j += 1
        q.appendleft(contents[i+1:j])
        i = j
    elif (contents[i] == ";"):
        print(q[0])
    i+=1

Вот и все! Скрипт готов! Теперь нам просто нужно превратить его в EXE-файл. Для этого создайте еще один файл Python и назовите его setup.py. Внутри файла вставьте следующий код:

from cx_Freeze import setup, Executable
base = None
executables = [Executable("CUSTOM.py", base=base)]
packages = ["idna"]
options = {
    'build_exe': {
        'packages':packages,
    },
}
setup(
    name = "CUSTOM",
    options = options,
    version = "0.2",
    description = '',
    executables = executables
)

Не забудьте заменить CUSTOM именем вашего файла python. Просто запустите setup.py вот так:

python setup.py build

И это ОНО! Файл будет сохранен в папке сборки. Убедитесь, что другая папка (lib) и python3.dll, python3X.dll (X - ваша версия) находятся в том же каталоге, что и фактический exe-файл.

Теперь создайте текстовый файл со следующим:

"Hello World!';

Запустите его командой:

CUSTOM sample.txt

И «Привет, мир!» должен быть выведен! Не стесняйтесь добавлять в сценарий что угодно. Как упоминалось ранее, вы можете увидеть образец моей работы в моем GitHub.