Pull to refresh

Cj — новый язык программирования

Reading time 2 min
Views 14K
Давно уже в моей голове поселилась эта идея. Но я всё откладывал на потом — были более важные или интересные дела. А теперь я жалею, надо было всё бросить и сосредоточиться только на ней!

Все замерли в ожидании, что за идея? Идея — написать свой язык программирования!

Вздох разочарования, 99% выкинули свои компьютеры в окно, ну а для тех кто остался, я продолжу.

Меня всегда интересовали различные направления и веб я хочу сбацать и мобайл и десктоп и что-нибудь серверное готов написать, ещё мне интересены ИИ, игры, роботы, криптовалюты… И при этом, хотелось бы всё это писать на одном языке).

Смотрел я в сторону С++, C#, Java, Javascript и даже Python, но везде мне что-нибудь не нравилось…

Итак, всё решено, пишу свой язык программирования. Скрестим мощный C++ с лёгким Javascript и назовём Cj!

image

Начинаем придумывать синтаксис языка


При описании переменных я предлагаю дать возможность как в С++ сразу указывать тип переменной. Для описания автоматической переменной используем, как и в C++, слово auto, либо не указываем, как в Javascript, тип данных совсем.

int a;
auto b;
c = 5;

Теже правила применяем и для описания функций:

int sum() {}
auto sub() {}
mul() {}

Смотрите как удобно и лаконично! Если у имени есть скобочки (), то это функция, не надо никаких function, как в Javascript, но и возвращаемый тип указывать не обязательно!

Пока достаточно, полную спецификацию на язык можно посмотреть здесь: sitev.ru/post/163

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


Конечно, я сразу же побежал читать статьи про LLVM. Но прочитав пару статеек, мне стало скучно и грусно. Мозг устал, благо пора уже было спать. Проснувшись утром, я уже знал решение этой задачи: никаких 4-х букв, пишу строго на С++! Напишу свой лексер, парсер и т.д… Мне так интереснее, и в добавок, на выходе получим свой простенький аналог LLVM!

Синтаксические диаграммы для языка Cj


Писать сразу код по спецификации я пробывал, но постоянно путался, переписывал. Да и зачем? Если есть синтаксические диаграммы Вирта. Надо описать синтаксис визуально, а потом перевести его в код. Давайте быстренько набросаем эти диаграммы.

Программа — это блок кода, который состоит из statement (инструкций).



Основной код main_block_code отличается от вложенного {}. Для них буду разные диаграммы.



Обработка функций — это вызов и описание функции. Вызов попроще:



описание чуть посложнее:



И да, мы забыли про переменные и про то как они с функциями будут участвовать в выражении:



Осталось написать компилятор


Злые языки начнут язвить: ну-ну, пиши давай теперь свой компилятор. А я вот написал уже (генерирует исходник на JavaScript).

Пример на языке Cj:

int my_func1(int p) {
int a;
a = 5;
}
my_func1();


А вот что получается на Javascript:

function my_func1(p) {
	var a;
	a = 5;
}
my_func1();

Конечно, в языке пока только внедрены самые базовые возможности. Что тут говорить, в нём даже не описан оператор if! Да и компилятор скорее всего будет падать. Но всё ещё впереди, как говорится: лиха беда начало!

Исходники выложил на ГитХаб, а вот бинарник.

Смотрим, тестируем, присоединяемся к написанию нового языка программирования Cj!
Tags:
Hubs:
-47
Comments 284
Comments Comments 284

Articles