Для скриптовой машины сделать слово WordWorkerN.
Обрабатывающее (и компилирующее) ВСЕ слова ДО указанной скобки.
И на его основе "конструктор" для классов и исключений:
И вызов:
или:
или:
или:
Где Format тоже определяется ЧЕРЕЗ WordWorkerN:
Где ]]+ определяется так:
Где any:Cat определяется так:
Где strings:Cat определено так:
P.S. флективность (http://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C) грамматики - это кстати - плохо.
Будем от неё со временем избавляться.
P.P.S.
Или кстати ещё пример:
P.P.P.S. И кстати ещё пример:
Обрабатывающее (и компилирующее) ВСЕ слова ДО указанной скобки.
И на его основе "конструктор" для классов и исключений:
WordWorkerN .Create( ) CLASS IN aClassToCreate aClassToCreate [[ WordToWork DO ]] .Create ;
И вызов:
class::Exception .Create( 'Какое-то исключение' )
или:
class::EListError .Create( [[ 'List index ' anIndex ' out of bounds' ]] any:Cat )
или:
class::EListError .Create( [[ 'List index ' anIndex ' out of bounds' ]]+ )
или:
class::EListError .Create( Format( 'List index ' anIndex ' out of bounds' ) )
Где Format тоже определяется ЧЕРЕЗ WordWorkerN:
STRING WordWorkerN Format( ) [[ WordToWork DO ]]+ ;
Где ]]+ определяется так:
STRING FUNCTION ]]+ ]] any:Cat >>> Result ;
Где any:Cat определяется так:
STRING FUNCTION any:Cat [] IN anArray // - складывает ЛЮБЫЕ значения из массива как строки [[ @ ( IN anItem anItem ToPrintable )ITERATE anArray ]] strings:Cat >>> Result ;
Где strings:Cat определено так:
STRING FUNCTION strings:Cat [] IN anArray // - складывает строки массива на стеке Result := '' PROCEDURE DoCat STRING IN anItem Result := ( Result anItem Cat ) ; // DoCat @ DoCat ITERATE anArray ;
P.S. флективность (http://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C) грамматики - это кстати - плохо.
Будем от неё со временем избавляться.
P.P.S.
Или кстати ещё пример:
class::TEdit .Create( CurrentForm )
P.P.P.S. И кстати ещё пример:
: [[ // - слово начинает определение "константного массива" VOID ; // [[ [] : ]] // - слово заканчивает определение "константного массива" [] VAR Tmp Tmp := array:New @ ( DUP IsVoid ! ) WHILE BEGIN >>>L[] Tmp END DROP Tmp ; // ]]
Комментариев нет:
Отправить комментарий