Пишем преводач за нашия езотеричен език - софтуерни продукти
Взех езика 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;/* максимален размер на входния файл в символи * /