| 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


Rambler's Top100
^ Вверх
© 2002-2008 NedoPC.org