Блог программиста

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

Динамические массивы Cj

Теперь в Cj есть и динамические массивы!

Да, надо признать, это сокращённая версия, соответствующая данной диаграмме:

далее


Добавлены операторы if, for и while

Спецификация Cj 0.2 состоит из 2-х частей:

  • операторы if, for и while
  • динамические массивы

Массивы мы оставили на потом, а вот операторы условия и циклы реализовали.

далее


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

Это уже 3-ая редакция, видимо не последняя. Приходится править, не получается нарисовать сразу корректно.

Программа на языке Cj - это блок кода, состоящий из набора инструкций (назовём их statement). Строчки кода можно заключать в блоки в виде скобочек { }.

далее


Cj 0.2 spec...

Со спецификацией 0.1 Вы можете ознакомится здесь: sitev.ru/post/163. Данная спецификация, это продолжение спецификации 0.1:

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

далее


Как меня мочили на Хабре

Выложил статью на Хабре о своём языке (см. habrahabr.ru/post/340204/). Вроде бы ничего такого, но как меня там стали мочить - прям сил нету)) Решил проанализировать, кто мочит, собраться статистику и опубликовать в виде таблички. Вот что получилось.

Да, я слева )

далее


Cj уже компилирует!

Случилось! Версия Cj 0.1 (см. спецификацию sitev.ru/post/163) уже компилирует программы. Получается исходник на языке JavaScript.

Привожу ссылку на видео простенького примерчика: youtu.be/zwUhDOVifdw

далее


Как ускорить загрузку сайта?

Недавно ко мне по скайпу обратился клиент с вопросом ускорения загрузки сайта. Я ему сходу ляпнул: а давайте перепишем сайт на С++? Звуки грохота со стула отдались в моих наушниках, я сбросил звонок. И погрузился в глубокие раздумья. Как же, как же всё-таки ускорить сайт, ведь действительно, не переписывать же его на С++?

Благо интернет под рукой. Сам я разбираться не стал, но нашёл специалиста, который этим занимается. Это Владимир Муковоз. Так давайте же спросим у него, как он ускоряет сайты?

далее


Parser - синтаксический анализатор

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

Давайте сразу разобьём парсер на два класса. Первый будет абстрактным парсером, поместим его в библиотеку lang.

class Parser {
protected:
	vector nodes;
public:
	Parser(Lexer *lexer);
	virtual Str run(Str s) = 0;
	virtual Token getToken();
	virtual void savePosition();
	virtual void savePosition(int &savePos);
	virtual void rollback();
	virtual void rollback(int savePos);
};

далее


Lexer - лексический анализатор

Напишем универсальный лексер - лексический анализатор. Он будет выглядеть примерно так:

class Lexer {
public:
	Lexer();
	~Lexer();

	virtual void start(Str s);
	virtual Str step();

	virtual Str run(Str s);

	virtual bool isLetter(char a);
	virtual bool isNumeral(char a);
	virtual bool isSpecial(char a);

	virtual bool isIdentifier(Str lexema);
	virtual bool isNumber(Str lexema);
	virtual bool isSpecial(Str lexema);
	virtual LexemaType getLexemaType(Str lexema);
	
	virtual Token getToken(Str lexema);
};

далее


Как работает компилятор

Начинаем разрабатывать компилятор языка программирования Cj. Кстати, данный пост, возможно, пригодится для написания транслятора/компилятора/интерпретатора других языков, так что не зря пишу).

Мы будет сразу и писать компилятор (класс Compiler) и, одновременно, разбираться как он работает. Поехали!

далее

Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений