Препроцессор

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Препроцессор

витя ерыгин

Написан препроцессор для СПФ.
Не занимает места. Принцип "отработай и тебя тут вообще не было"
Позволяет писать простые макросы.
Препроцессор был написан без серьёзного форт-читерства.
Единственное, - псевдо-goto
Читаемость исходного кода препроцессора - " фортер знает толк в извращениях :( "
Портируемость на другие форт-системы потенциально высокая, надеюсь...
Ознакомиться можно по ссылке:
https://vk.com/doc189457568_437831253?hash=1815dabd49770f221c&dl=428586639e0a5557b1


--
Виктор Ерыгин
------------------------------------------------------------------------------

_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Препроцессор

Иванов
Иногда требуется определить контекстно-зависимую константу, или нужно
использовать слово до его определения, тогда применяю макросы:

: #def ( <name строка.... > -- ) \ запомнить строку под именем name
    \ при исполненни name - выполнить строку  
    CREATE  \ выделяем name, создаём статью
        10 WORD     \ выделяем остаток строки 
        DUP C@      \ узнаем размер строк
        1+ HERE OVER ALLOT \ резервируем место
        SWAP CMOVE      \ сохраним строку
        IMMEDIATE       \ новое слово будет немедленным
    DOES> COUNT  EVALUATE  ; \ прочитать строку и выполнить

: see#def ( <name_def> -- ) \ показать определение #def
    ' >BODY COUNT TYPE ;


\ Примеры:
\ #def +C5.  C5 + . \ макрос с еще неопределенным макросом (C5) внутри
\ #def C5 2 3 +     \ определение простого макроса C5
\ 7 +С5.
\ 12 Ok

\ #def основа 10    \ значение зависит от системы счисления на момент исполнения
\ основа .dec
\ 10  Ok
\ hex основа .dec
\ 16  Ok
\ binary основа .dec
\ 2  Ok

\ #def naa : aa ." AA" cr ; \ определение слова в макросе




В Пт, 02/09/2016 в 18:05 +0300, витя ерыгин пишет:

>
> Написан препроцессор для СПФ.
> Не занимает места. Принцип "отработай и тебя тут вообще не было"
> Позволяет писать простые макросы.
> Препроцессор был написан без серьёзного форт-читерства.
> Единственное, - псевдо-goto
> Читаемость исходного кода препроцессора - " фортер знает толк в
> извращениях  " 
> Портируемость на другие форт-системы потенциально высокая, надеюсь...
> Ознакомиться можно по ссылке:
> https://vk.com/doc189457568_437831253?hash=1815dabd49770f221c&dl=4285
> 86639e0a5557b1
>
>
> -------------------------------------------------------------------
> -----------
> _______________________________________________
> Spf-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/spf-dev

------------------------------------------------------------------------------
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Препроцессор

Королев Виктор
Для использования слова до его определения, мне кажется гибче использовать векторные слова
 

\ #def +C5. C5 + . \ макрос с еще неопределенным макросом (C5) внутри
\ #def C5 2 3 + \ определение простого макроса C5
\ 7 +С5.
\ 12 Ok

VECT C5
: +C5. C5 + . ;
:NONAME 2 3 + ; TO C5
7 +C5.

12

03.09.2016, 16:01, "ivanov" <[hidden email]>:

Иногда требуется определить контекстно-зависимую константу, или нужно
использовать слово до его определения, тогда применяю макросы:

: #def ( <name строка.... > -- ) \ запомнить строку под именем name
    \ при исполненни name - выполнить строку  
    CREATE  \ выделяем name, создаём статью
        10 WORD     \ выделяем остаток строки 
        DUP C@      \ узнаем размер строк
        1+ HERE OVER ALLOT \ резервируем место
        SWAP CMOVE      \ сохраним строку
        IMMEDIATE       \ новое слово будет немедленным
    DOES> COUNT  EVALUATE  ; \ прочитать строку и выполнить

: see#def ( <name_def> -- ) \ показать определение #def
    ' >BODY COUNT TYPE ;


\ Примеры:
\ #def +C5.  C5 + . \ макрос с еще неопределенным макросом (C5) внутри
\ #def C5 2 3 +     \ определение простого макроса C5
\ 7 +С5.
\ 12 Ok

\ #def основа 10    \ значение зависит от системы счисления на момент исполнения
\ основа .dec
\ 10  Ok
\ hex основа .dec
\ 16  Ok
\ binary основа .dec
\ 2  Ok

\ #def naa : aa ." AA" cr ; \ определение слова в макросе




В Пт, 02/09/2016 в 18:05 +0300, витя ерыгин пишет:


 Написан препроцессор для СПФ.
 Не занимает места. Принцип "отработай и тебя тут вообще не было"
 Позволяет писать простые макросы.
 Препроцессор был написан без серьёзного форт-читерства.
 Единственное, - псевдо-goto
 Читаемость исходного кода препроцессора - " фортер знает толк в
 извращениях  " 
 Портируемость на другие форт-системы потенциально высокая, надеюсь...
 Ознакомиться можно по ссылке:
 https://vk.com/doc189457568_437831253?hash=1815dabd49770f221c&dl=4285
 86639e0a5557b1


 -------------------------------------------------------------------
 -----------
 _______________________________________________
 Spf-dev mailing list
 [hidden email]
 https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------

_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev