Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TextFuck by FBX
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
FBX
Вот делать мне нечего, решил наваять. Я даже не знаю, на что это похоже.
http://mutnosoft.ru/d/textfuck.rar

Основа языка - строки и односимвольные функции.
Инструкция состоит из 1 символа (оператора), аргументов - строк, перечисленных через запятую, и точки с запятой в конце.
Переменные тоже строки. За основу для строк взят делфовский AnsiString - динамические строки неограниченной длины.

Интерпретатор работает в том числе и из командной строки. Справка в исходном коде:

CODE

//интерпретатор нехитрого языка
//язык состоит из односимвольных операторов, и текстовых параметров через ''
//все остальные символы игнорируются
//запись: # '','', ... ,'';
// 'abc''def' означает строку abc'def
//если оператор требует несколько входных значений, они записываются через ,
//точка с запятой финализирует запись
//операторы являются по сути функциями, и их результат такой же текстовый
//строки в аргументе конкатенируются при последовательной записи
//можно указывать голый текст и вызов функций
//пример записи вложенного вызова: # 'abc',(# 'fff','321','333';);
//скобки изначально игнорируются интерпретатором и служат для наглядности

//операторы можно перегружать на вызов функции с определенным именем
//перегрузить можно любой из 256 символов

//@ - символ разметки функций в модуле
// # func, ? , ... , ? ; - вызов функции func , далее идут аргументы
// = var, value; - присвоение переменной var значения value (результат = value)
//(все переменные текстовые) (если переменной нет, она создается)
//извлечение из ? номера перем. - цифры означает обращение к аргументу функции
//нумерация аргументов - с нуля, результат сохраняется в нулевой
//единственный способ записать результат: =,result; - первый аргумент пустой
// = var; - уничтожение переменной (либо ничего, если ее нет)
// =; - очистка локальных переменных функции
// при вызове функции число переменных сохраняется, все переменные, что были
// созданы под номерами выше этого числа, уничтожаются
// самоочистки не происходит!
// = var, value, ; - создать переменную даже если такая уже существует
// \ text; - вывод на экран текста text
// ^; - получить результат ввода
// ? var; - извлечение значения переменной var
// ?; - извлечь код текущей функции
// ?'0'; ?'1'; и т.д. - извлечь аргумент функции (возвр. пуст.стр. если его нет)
// ?'-1'; - извлечь количество аргументов функции (любое отрицательное число)
// ? func,(); - извлечь код функции
// ! op,func; - переопределить op[1] на функцию func (возвращает бывшую функцию)
// ! op; - обнулить переопределение (возвращает бывшую функцию)
// $ name; - загрузить функции модуля name и выполнить его код, если он есть
// в модуле сначала идет код, потом @funcname1; @funcname2; и т.д. (разметка)
// ~ func, code; - создать или перезаписать код функции
// ~ func; - уничтожение функции (либо ничего, если ее нет)
// | code; - запускает код, указанный в code
// | str, code; - если строка не пустая, запускает code
// | str1, str2, code; - если str1 равно str2, запускается code
// | str1, str2, code, else; - то же самое, но else запускается если не равны
// _; - ничего не делает
// _ str; - если строка не пустая, прерывает функцию
// _ str1, str2; - если строки равны, прерывает функцию
// _ str1, str2, ; - если строки не равны, прерывает функцию
// /; - возвращает перевод строки
// / num; - возвращает символ с кодом num (по модулю 256)
// / str,count; - возвращает str, повторяющийся count раз
// / str,pos,char; - возвращает str, в котором символ pos заменен на char
// : symb; - возвращает код символа
// : sub, str; - возвращает позицию подстроки в строке (0 если нет)

// * o, args, ... , args; - тут будут системные функции
// & o, args, ... , args; - тут будут вещественные функции
// . str; - возвращает длину строки
// . str,pos; - возвращает символ с номером pos (нумерация с единицы)
// . str,pos,len; - возвращает подстроку начиная с pos длины len
// 0; 1; ... 9; - извлечь значение строковых "регистров"
// 0,value; 1,value; ... 9,value; - изменить значение строковых "регистров"

// > cond, str, code; - цикл с предусловием:
// пока (результат выполнения cond) не равен (str), выполнять code
// < cond, str, code; - цикл с послеусловием:
// выполнять code, если (результат выполнения cond) = (str), выйти

// не использованы: [, ], +, -

// целочисленные (работают через 64bit signed):
// % a,'+',b; - сложение
// % a,'-',b; - вычитание
// % a,'*',b; - умножение
// % a,'/',b; - целочисленное деление
// % a,'%',b; - остаток от деления
// % a,'&',b; - логическое и
// % a,'|',b; - логическое или
// % a,'^',b; - исключающее или
// % a,'\',b; - исключающее или (синоним)
// % a,'>>',b; - битовый сдвиг вправо
// % a,'<<',b; - битовый сдвиг влево
// % a,'>',b; - проверка (если больше, то возвращает '1', иначе '0')
// % a,'>=',b;
// % a,'<',b;
// % a,'<=',b;
// % a,'<>',b;
// % a,'><',b;
ChASnock
И что вас сподвигло на создание данного яп и этой темы?
Etoprostoya
Захотел - создал. Некоторым бОльшего и не надо.
Aleee
С моей, экономической точки зрения, любая вещь или творение оправдывают свое создание, если общие или предельные выгоды превышают издержки на их создание. Даже если источник этой выгоды - самоудовлетворение.
FBX
Обновил. Впринципе, на нем уже можно реализовывать длинную арифметику crazy.gif
Первый пост лень обновлять.
Berserker
Алеее. Экономика тебя портит. Издержки, выгоды...
Кстати, ты даже курсач как книгу написал. В повествовательном стиле )
В отношении человека нет понятия достоверной оценки выгоды и издержек. Фактически, сама оценка колеблется в любую сторону, в зависимости от текущей позиции оценивания. Ну и если уж приплетать бредоэкономику с её суперабстрактными моделями, которые вечно обламываются о реальность и психологию, то тогда нужно судить об альтернативной выгоде, которую автор, скорее всего упустил, взявшись за очередную бесполезную эзотерику.
tolich
Упущенная выгода относится к издержкам, не?
Aleee
Так вот кто там оставляет отзывы о моем курсаче smile.gif

Мы то с вами знаем, коллега, что если оценивать наборы благ (а значит и выгод) в количественных единицах индивиды навряд ли могут, то сравнивать между собой - вполне. Поэтому если мы станем отталкиваться от полезности в ее широком, общественном смысле - то очевидно, что автор впустую потратил ресурсы. А если в узком - личностном, как все то, что способствует удовлетворению потребностей, - вполне возможно, что это занятие окажется весьма полезным. Я не утверждаю, что был выбран наилучший способ размещения ресурсов, я просто говорю, что польза - она разная бывает. И не все то, что кажется бесполезным с обывательской точки зрения, является бесполезным на деле.

FBX, оченно извинияюся за превращение темы в полигон псевдонаучных дебатов.
FBX
А все из-за того, что польза от этого проекта неочевидна.

Ну да и фиг с ней. Проще надо как-то относиться.

SQL
@delete;
= 's',?'0';,(); //save A (LOCAL)
=,(.(??'s';;),(?'1';),(?'2';)););
= (?'s';),
(. (??'s';;),'1',(% (?'1';),'-','1';);)
(. (??'s';;),(% (?'1';),'+',(?'2';);),(.??'s';;;);)
;
=; //delete locals


Вот то же самое на псевдо-коде:

1) {create always} s = get_value (arg(0))
2) result = copy ( get_value ( get_value (s)), arg(1), arg (2) )
3) get_value (s) = copy (get_value (get_value (s)), 1, get_value(1) - 1) + copy (get_value (get_value (s)), arg(1) + arg(2) , str_len (get_value (get_value (s))) )
4) delete local variables
Berserker
Цитата
Так вот кто там оставляет отзывы о моем курсаче

Внимательно читал. У тебя литературный талант. Вместо шняги простой и понятный текст, умеренно изобилующий англицкими терминами ) Хотя про развитую демократичную страну Беларусь был явный загиб. Но плюс за то, что применена математика, в частности, корреляционный анализ.

Цитата
я просто говорю, что польза - она разная бывает

В целом да, интерпритаторы - это хорошо, но когда они не брейнфаковские (
FBX
Доработал малость, исправил ошибки.
В модулях реализованы некоторые функции:

long_add (длинное сложение)
long_sub (длинное вычитание с дополнением)
long_mul (длинное умножение на число до 2^63)
long_fac (длинный факториал)

fac (обычный факториал)

delete, insert для работы со строками

inc, dec (увеличить/уменьшить)
div (разделить нацело с остатком)
loop, loop_down (циклы)
gamecreator
Цитата(FBX @ 07 Jan 2011, 23:17) *
на число до 2^63
маловато будет.
FBX
Это умножение длинного числа на короткое
Etoprostoya
А что, умножение длинного на длинное не организуешь? smile.gif
FBX
Да лень что-то...
gamecreator
и какое диапазон чисел можно поместить в твои длинные числа?
FBX
любой, насколько памяти хватит..

666! вычисляется 30 секунд, пичаль.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.