Comments 21
Неоригинально. Процедурные расширения Brainfuck науке известны давно — хотя бы pbrain. Чтение и запись чисел как чисел — хотя бы COW. Начало и конец комментария не нужны вообще — все символы, кроме команд, считаются комментариями автоматически, в крайнем случае пишем [-][комментарий с любыми символами]. Обнулить ячейку — чем плохо старое доброе [-]?
Как говорил один из моих преподавателей, большой поклонник теории формальных языков и построения трансляторов: «А напиши-ка ты мне на своем языке Ханойские Башни». Думаю он и сейчас так говорит :)
Сурово, но постараюсь :)
Я к тому, что у нас в то время была курсовая по этому предмету, и мы с другом решили сделать транслятор BF в более человеческий язык и обратно, дополнительно нам была поставлена задача, написать свою VM(ну или транслятор если будет угодно) под эти языки, поэтому было принято решение, делать некий «байткод» в который транслировались бы программы с обоих языков с возможностью также распаковать этот «байткод» в любой язык обратно. Собственно оттуда и фраза про Ханой, правда мы поступили как все студенты — нашли в сети Ханой на BF (кстати помоему тот, который указан в комменарии ниже) прогнали его через свои ретрансляторы и получили Ханой на своем языке :)
Интересно). А какой был ваш человеческий язык? Когда я брался расширять BF, был соблазн добавить еще пару фич, например, банальное умножить!
Достаточно простой, там были процедуры и циклы по-моему, умножение если мне не изменяет память было оформлено в процедуру. Сейчас уже всех подробностей не вспомню, а проекта у меня не осталось уже.
Кажется, кому-то он это уже сказал: roland-illig.de/hanoi.brainfuck.html
const unsigned int w = 10;
std::cout << "Registers:";
for ( unsigned int i = 0; i < regSize; i )
{
std::cout << std::endl;
for ( unsigned int w = 0; w < 10; w ++ )
{
if ( i++ < regSize )
std::cout << "R" << i <<"[" << reg[ i - 1] << "] ";
}
}
std::cout << std::endl;
Мда…
Где вы это нашли? Только не говорите у меня в коде. Ибо такой код не может работать, а регистры у меня выдаются очень даже нормально.
А как ему работать?
и потом в другом блоке, где w все еще виден, создается другой объект с таким же именем, и даже больше, задается новое значение?
Разъясните. Такого я не знал.
P.S. разумеется
Ненужная строчка. Насколько помню второй цикл был нужне, чтобы в каждой строчке показывалось не более чем 10 регистров.
P.P.S.
Стыдно, конечно сознавать, что эта строчка моих рук дело. Строчка совсем не специфичная, она ужасна.
const unsigned int w = 10; // w - объявлен и определен как константа, не подлежит изменению
и потом в другом блоке, где w все еще виден, создается другой объект с таким же именем, и даже больше, задается новое значение?
Разъясните. Такого я не знал.
P.S. разумеется
unsigned int w = 10;
Ненужная строчка. Насколько помню второй цикл был нужне, чтобы в каждой строчке показывалось не более чем 10 регистров.
P.P.S.
Стыдно, конечно сознавать, что эта строчка моих рук дело. Строчка совсем не специфичная, она ужасна.
const unsigned int w = 10; // w — объявлен и определен как константа, не подлежит изменению
unsigned int w = 0;
{ } создает новую область видимости, внутри нее можно переопределить переменную таким же именем(бедные компиляторы).
unsigned int w = 0;
{ } создает новую область видимости, внутри нее можно переопределить переменную таким же именем(бедные компиляторы).
#include <stdio.h>
int main() {
int a = 4;
{
char a = 42;
printf("%c \n", a);
}
a = 48;
printf("%d \n", a);
return 0;
}
это требование стандарта или специфика некоторых компиляторов? Потому как помню в одно время такой код работал при одном компиляторе, в другом выдалось, что переменная с таким именем не существует.
for( int i = 0; i < someConstant; i++)
{
// ...
}
for( int i = 0; i < anotherConstant; i++)
{
// ...
}
Вероятно вы имели ввиду:
for( int i = 0; i < someConstant; i++)
{
//…
}
for(i = 0; i < anotherConstant; i++)
{
//…
}
for( int i = 0; i < someConstant; i++)
{
//…
}
for(i = 0; i < anotherConstant; i++)
{
//…
}
Да, именно это я и имел ввиду.
Тут другая ситуация, зависит от того, в какой области видимости компилятор объявит переменную, которая объявляется в for(;;), либо в текущей, либо во вложенной.
Если в текущей, тогда будет видна и в следующем цикле, если во вложенном, то она недоступна снаружи(что логично).
Ну это стандартное поведение для всех языков, которые я щупал =)
Если в текущей, тогда будет видна и в следующем цикле, если во вложенном, то она недоступна снаружи(что логично).
Ну это стандартное поведение для всех языков, которые я щупал =)
Т.e. все-таки все от компилятора звисит, не стандарт устанавливает.
P.S.
Интересно за что мне минуснули в пред. комментах. За вопрос? Мило.
P.S.
Интересно за что мне минуснули в пред. комментах. За вопрос? Мило.
Sign up to leave a comment.
Пишем интерпретатор для своего эзотерического языка