Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт авг 07, 2026 16:16

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: распознавалка чисел в формате языка verilog
СообщениеДобавлено: Сб июл 09, 2022 01:19 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5063
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
source file: verilog.fts
\ 02.06.2022 ~mOleg
\ Copyright [C] 2022 mOleg mOlegg@ya.ru
\ преобразование строкового представления чисел вида 3'b00101 или 10'h1AF или 7'd23 или '123

branch/ case.fts
math/ double.fts

\ разделить строку по указанному символу char
\ возвращается остаток строки asch и его длина #, начало и длина строки до разделителя
\ если разделитель не встретился, длина #h будет равна 0
: split ( asc # char --> asch #h ascl #l )
>L DDUP BOUNDS
BEGIN DDUP > WHILE
DUP C@ L@ = WHILENOT
C+
REPEAT
THEN
TUCK - DUP >L DSWAP L> -
LDROP ;

\ поиск определенного через `define имени
: Defined ( asc # --> ud asc # )
[CHAR] ' split SFIND \ искать необходимо либо не в словаре VERILOG, либо только по цепочке слов !! иначе будет рекурсия
IF EXECUTE DROP DSWAP
ELSE >STDERR ERROR" - invalid name"
THEN ;

\ определить битовую длину числа
: ?Long ( asc # --> ud asc # )
OVER C@ DUP [CHAR] ` = IF DROP Defined ;THEN
0x0A DIGIT IFNOT 0:0 DSWAP ;THEN DROP \ если битовая длина числа не задана
0:0 DSWAP 0x0A >number
DOVER 0:0 D=