| NedoPC Project
| NedoPC Forum
| NedoPC Group
|
RW1 & C
Язык программирования RW1 создавался изначально как язык программирвания
роботов в игре RW1 (см. http://rwar.net).
и прошел путь от ассемблероподобного языка к си-подобному.
Вот пример HelloWorld на Си и RW1:
// hello.c
#include <stdio.h>
main()
{
printf("Hello, World");
}
// hello.rw1
robot "Hello"
author "A.Shabarshin"
main()
{
say "Hello, World"
}
Правда похоже? :)
Существует
полное описание языка RW1, а вот вкраце
общие черты у RW1 и Си:
- функция main() - условие
if(){...} else{...} - цикл for(;;){...} с
break и continue - цикл while(){...} с
break и continue - цикл do{...}while() с
break и continue - команда goto метка -
команда return выр в конце функций
Вот чего у RW1
нету:
- многомерных массивов - массивы
только одномерные, для имитации двумерных можно описывать макрос
доступа по двум индексам
- переменные могут быть только словом со знаком (-32768...+32767)
- нет struct и union - только переменные и массивы
- нет структуры switch(){case...} вместо текста
switch(var) { case 0: ok=1; break; case 2: ok=2;
break; case 3: ok=10; break; }
будем писать
def labs[4]={lab0,0,lab2,lab3} goto labs[var] lab0:
ok=1; goto end lab2: ok=2; goto end lab3: ok=10; goto end
end:
- пока совсем нет своих функций, которые можно было
бы использовать в выражениях (пока самый большой минус), зато есть
"процедуры" (если выражаться на языке паскаля) или по-другому -
функции, которые вызываются не в выражениях, а в самом теле
программы или внутри других функций. Зато внутри выражений можно
использовать макросы - вот то, что определено в RW1_STD.RWI:
@if(3)=((@1)?(@2):(@3))
@max(2)=(((@1)>(@2))?(@1):(@2))
@min(2)=(((@1)<(@2))?(@1):(@2))
@abs(1)=(((@1)<0)?(-(@1)):(@1)) @sqr(1)=((@1)*(@1))
@mod(2)=((@1)%(@2)) @and(2)=((@1)&&(@2))
@or(2)=((@1)||(@2)) @not(1)=(!(@1)) @neg(1)=(-(@1))
вот например использование макроса @max:
aa=10;bb=20;cc=@max(aa,bb) ответ будет 20
^ Вверх
|