Этот вопрос закрыт для ответов, так как повторяет вопрос Хочу написать свой интерпретатор языка программирования, в какую сторону копать?
gnifajio
@gnifajio
Совершенствуюсь каждый день

Как создать свой PL?

Неинтересная предыстория

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

Посоветуйте хорошую литературу по созданию языков программирования.
Только не советуйте пожалуйста регулярки.
Если что, я хочу сделать интерпретируемый ЯП с ядром на python.
  • Вопрос задан
  • 230 просмотров
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Даже для простого ЯП тебе придётся решить минимум четыре задачи:
1. Лексический анализ. Входной текст нужно превратить в цепочку токенов, например z = x + y превратится в что-то типа
[ (token.IDENTIFIER, 'z'), (token.OPERATOR, '=') (token.IDENTIFIER, 'x'), (token.OPERATOR, '+') (token.IDENTIFIER, 'y') ]

2. Синтаксический анализ. Тебе нужно превратить цепочку токенов в древовидную структуру. Корень дерева - программа целиком, промежуточные узлы - элементы программы (функции, составные операторы, сложные выражения и пр.), листья - отдельные элементы сложных выражений и примитивные операции без параметров (типа pass в питоне).
Например цикл while будет иметь два дочерних узла: выражение-условие и тело цикла.
3. Области видимости. Тебе нужно иметь возможность сопоставить имя(идентификатор) и сущность (переменную, функцию и т.п.).
Самый простой способ - позволить узлу дерева описывать идентификаторы, которые известны в этом узле. Тогда при раскрытии идентификатора достаточно подняться вверх по дереву, пока не найдёшь нужное имя.
4. Выполнение. Так как ты хочешь интерпретируемый язык, то выполнение будет сводиться к обходу дерева в глубину. Некоторые операторы типа break могут вмешиваться в этот порядок. Это описывается паттерном Интерпретатор из набора Банды Четырёх.

Отдельные задачи в этом списке вполне себе гуглятся, и могут решаться по-разному.
Ответ написан
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы