Эта статья о трансляторе эзотерического языка на TurboAssembler'e (TASM).
P′′ — низкоуровневый язык программирования, созданный в 1964 году Коррадо Бёмом.
Этот язык разрабатывался для реализации циклов без использования оператора GOTO.
В данной статье демонстрируется создание некого транслятора на низком уровне, в котором обработка текста программы (строки) производится посредством условных и безусловных переходов, т.е. низкоуровневых эквивалентов оператора GOTO.
Вот здесь лежит форк визуализатора(visualizer), позволяющего выполнить отладку bf-программ в пошаговом режиме
Машина, которой управляют команды транслятора, состоит из упорядоченного набора ячеек и указателя текущей ячейки, подобно тому, как организована машина Тьюринга. Кроме того, подразумевается устройство общения с внешним миром (см. команды. и ,) через поток ввода и поток вывода.
Сперва напишем транслятор на каком-нибудь высокоуровневом языке, например, на Паскале.
Пусть массив
data_arr представляет память данных (ленту Тьюринга), пусть строка
str_arr содержит команды.
Напишем программу, выводящую символ, ascii-код которого соответствует количеству
+ (поэтому нам нужны будут только команды
+ и
.)
var
data_arr:array[1..10] of integer; // массив данных
str_arr: string; // команды
i, j: integer; // индексы строки и массива
begin
j:=1; // нумерация элементов массива начинается с единицы
readln(str_arr); //считываем строку
for i:=1 to length(str_arr) do begin // в цикле обрабатываем строку
if (str_arr[i]='+') then data_arr[j]:= data_arr[j]+1;
if (str_arr[i]='.') then write(chr(data_arr[j]));
end;
end.
bf-код +++++++++++++++++++++++++++++++++. выдаст
! (ascii-код символа
! равен 33 ).
Программу можно проверить в online ide
ideone.com