nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 10 Dec 2024 05:30



Reply to topic  [ 34 posts ]  Go to page Previous  1, 2, 3
Robby - расширение языка Robot Warfare 1 (RW1) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Обновил сырцы ROBBYC в репе поправив багу, которая проявлялась на 16-битных системах с командой PUSH - неправильно компилировалось например сравниение if(sum==#FFFF):

https://gitlab.com/nedopc/sdk/-/tree/master/robbyc

Бага с CONTINUE, а также невозможность использования двоеточия : внутри SAY пока остаются "известными" багами...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jul 2024 01:38
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Shaos wrote:
Еще можно сделать переменные типа беззнаковый байт, добавляя к имени суффикс $ - внутри такие однобайтовые переменные будут представлены как половинки обычных переменных, соответственно надо будет добавить 2 постфиксных спецоператора, которые могут выделять младший байт переменной ' и старший байт переменной " - препроцессор будет их вставлять в выражения вместо вызова соответствующих байтовых переменных
$ уйдёт под строки, а байтовые переменные можно помечать суффиксом ` (prime - значок на клавише левее 1). В будущем переменные имеющие тип плавающая точка можно помечать суффиксом ~ (расположено на той же клавише левее 1). Далее суффикс ! может обозначать обращение к половинкам слова - VAR!L к младщей и VAR!H к старшей - причём такая запись будет допустима как справа, так и слева от присваивания (придётся добавить новые команды в длинные выражения - LOADL, SAVEL, LOADH и SAVEH работающие со старшими половинками переменных, а также надо будет как-то помечать выражения, внутри которых операторы работают с байтами, а не со словами - либо другим кодом, отличным от 0x40, либо специальной командой-префиксом). Препроцессор будет подменять обращения к однобайтным переменным на обращения к половинкам неявных 16-битных переменных, добавленных препроцессором - например VAR1' будет заменено на _1!L, а VAR2' на _1!H (или лучше ! и !! сделать?)...

P.S. Можно многобайтовые целые поддержать задавая их размер в байтах после ' типа VAR'4 и VAR'8, тогда обращение к их отдельным байтам можно организовать через VAR!0, VAR!1 и т.д. (а надо ли?). Препроцессор будет заводить нужное количество массивов для представления таких чисел, а наряду с командой длинного выражения 0x40 можно добавить 0x4B для байтовых выражений, 0x4F для выражений с плавающей точкой, а также 0x50+N (где N>=3) для выражений работающих с многобайтовыми данными (ограничиться сверху скажем 12-байтовыми числами)...

P.P.S. Но серьёзные расширения байткода будут не раньше версии 3...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


13 Aug 2024 00:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Ещё наверное имело бы смысл добавить джавовский беззнаковый сдвиг >>> при котором число слева всегда нулями дополняется (в джаве нету беззнаковых типов, как собственно и в Robby, поэтому беззнаковый сдвиг нужен как отдельная операция). Также можно добавить оператор возведения в степень ** как в языках Algol, Basic, Fortran, JavaScript, OCaml, Pascal, Perl, Python, Ruby и Smalltalk...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


15 Aug 2024 00:49
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
В первую очередь надо поддержать вышепредложенный вариант DEF STRING$="aaa" (даже без квадратных скобок т.к. необходимый размер массива в словах будет вычисляться компилятором).
Во вторую очередь надо реализовать расширение for: for(A in 1..10) (как в аде или руби) и for(A in array) (как в джаваскрипте), причём на уровне препроцессора!
Также хочу количество регистров увеличить до 26, дабы охватить все буквы алфавита, а вот с локальнымм переменными надо подумать...

Цикл for(A in 1..10) превращается в тоже самое как и for(A=1;A<=10;A++) - это просто, а вот с for(A in array) надо помудрить ибо A в данном случае не индекс, а значение соответствующего элемента из массива, т.е. придётся для хранения индекса заводить "скрытую" переменную _1 (и далее _2, _3 и т.д.), которая будет инкрементироваться для доступа ко всем элементам массива array и A в цикле "под водой" будет присваиваться значение array[_1]. Обязательность скобок можно отменить - тогда синтаксис циклов будет похож на Rust. Аналогичный подход со скрытыми переменными, которые генерит сам компилятор, я планировал использовать для реализации вызовов функций в составе арифметических выражений.
Тут по ходу можно поддержать обход строки через for C in string$ где строка обходилась бы не пословно, а побайтно, т.е. препроцессор будет это превращать примерно вот в это:
Code:
_1=0
do
{
 _2 = string$[_1>>1]
 if(_1&1) C=_2!!
 else C=_2!
 ...
 _1++
} while(C!=0)

P.S. Можно даже пойти дальше и сделать так, чтобы запись вида string$[idx] в случае строки (имя переменной заканчивается на $) индексировала бы не слова, а байты! Тогда правила препроцессора для цикла for-in в случае строки станут проще:
Code:
_1=0
do
{
 С = string$[_1]
 ...
 _1++
} while(C!=0)

P.P.S. Можно ещё придумать способ получения размера массива по его имени - типа array!? (компилятор будет подменять это на константу во время компиляции)

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


15 Aug 2024 02:59
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 34 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.