Пишем преводач за нашия езотеричен език - софтуерни продукти

Взех езика Brainfuck като основа, той е толкова малък, че можете да разширите малко, за да получите почти нов и доста функционален език за програмиране. И в същото време, за да не загубя пикантността на оригиналния език - моят език все още ще измъчва мозъка на програмиста, подобно на родителя му!

Така че Brainfuck. Накратко, идеята е тази, има N регистри/клетки. Програмистът има достъп до всички тях, но движението през тях се извършва изрично. Тези. от клетка 2 не можете да отидете веднага в клетка 7, трябва последователно.

Език "ключови думи":

Тъй като целият набор от ключови думи се състои от ANCII символи, имаме:

// Търсени ключови думи
const char bf_next = '>';
const char bf_prev = '

Без загуба на общ характер, ние вземаме ограничен брой клетки, да речем 256, и ако се опитаме да отидем до невалидна клетка, ще отидем до първата клетка (ако отидем вляво) или до последната (ако отиваме надясно).

const неподписан дълъг regSize = 256; // Брой на регистрите

long reg [regSize]; // Самите регистри
дълъг stck [regSize]; // стек, всяка функция има свой собствен стек

void resetRegisters (); // Функция за нулиране на регистрите

void printRegistres (); // Показване на състоянието на регистрите

Сега да кажем, че имаме test.bf като входен файл, който съдържа код на моя език или родния Brainfuck. Преводачът трябва да е "съвместим с обратна връзка".

Отново, без загуба на общност, можем да съхраним целия код в някакъв ограничен масив. Тези. интерпретаторът ще работи с файлове с ограничен размер, да кажем:

const unsigned long maxCodeSize = 1024000;/* максимален размер на входния файл в символи * /