Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Apr 23, 2019 11:20 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 62 posts ]  Go to page Previous 1 2 3 4 5 Next
Author Message
PostPosted: Sun Sep 27, 2015 2:38 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Добавлены события окна

Code:
object window,%1

property mousedown,%1,down
property mouseup,%1,up

create %1

down:
console print,'mouse down\n'
ret

up:
console print,'mouse up\n'
ret


Top
   
PostPosted: Sun Sep 27, 2015 3:16 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Теперь можно добавлять функции, пример реализации input, через getch

Code:
goto main

input:
  console print,'input text: '
  mov %0,''
  loop:
  console getch,%1
  if %1,KEY_ENTER
  = end_func
  sym %1,%1
  add %0,%1
  console print,%1
  goto loop
 
  end_func:
  console print,'\n'
ret

main:

call input

console print,'Text: '
console print,%0


Attachments:
Безымянный.PNG
Безымянный.PNG [ 6.84 KiB | Viewed 2392 times ]
Top
   
PostPosted: Mon Sep 28, 2015 7:33 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
В процессе 2 транслятор.
Что уже умеет делать?

Переводит такой код:
Code:
a=1;
text = 'this ';
if(a==1)
{
 text=text+'work';
}
print(text);


В такой:
Code:
goto main
PRINT:
console print,%10
mov %0,0
ret
main:
mov %51,1
mov %52,'this '
cmp %51,1
!= IF_BLOK_0
mov %52,%52
add %52,'work'
IF_BLOK_0:
mov %10,%52
call PRINT


почти полностью написан парсер матвыражений.


Top
   
PostPosted: Mon Sep 28, 2015 8:36 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Новая ф-ция loop,char,getch
Code:
loop
{
  print(char(getch()));
}


преобразует в

Code:
goto main
GETCH:
console getch,%0
ret
CHAR:
sym %0,%10
ret
PRINT:
console print,%10
ret
main:
LOOP_BLOK_1:
call GETCH
mov %10,%0
call CHAR
mov %10,%0
call PRINT
goto LOOP_BLOK_1


Размер бинарного файла 64 байта без сжатия и оптимизации.
Теперь за счет поддержки вложенной функции стало кодить еще комфортнее и улучшать байтовый код.


Top
   
PostPosted: Tue Sep 29, 2015 1:23 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Как хорошо, когда все идет отлично!

Теперь сделал поддержку функций!!!

Пример:
Code:
function sum(a,b)
{
   return a+b;
}
a=sum('Hello ','World!!!');
print(a);


Результат:
Code:
Hello World!!!


Пока что рассчитано для ф-ции 20 аргументов, как локальных, в будущем может сделаю больше.


Top
   
PostPosted: Tue Sep 29, 2015 1:54 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Еще пример:
Code:
function input()
{
  ret = '';
  loop
  {
    code = getch();
    if(code==13)
    {
      return ret;
    }
    s=char(code);
    print(code+'->'+s+',');
    ret = ret+s;
  }
}
print("\ntext:"+input());


транслирует в:
Code:
goto main
FUNCTION_GETCH:
console getch,%0
ret
FUNCTION_CHAR:
sym %0,%10
ret
FUNCTION_PRINT:
console print,%10
ret
FUNCTION_INPUT:
mov %51,''
LOOP_BLOK_1:
call FUNCTION_GETCH
mov %52,%0
cmp %52,13
!= IF_BLOK_2
mov %0,%51
ret
IF_BLOK_2:
mov %10,%52
call FUNCTION_CHAR
mov %53,%0
mov %10,%52
add %10,'->'
add %10,%53
add %10,','
call FUNCTION_PRINT
mov %51,%51
add %51,%53
goto LOOP_BLOK_1
ret
main:
call FUNCTION_INPUT
mov %10,"\ntext:"
add %10,%0
call FUNCTION_PRINT


на выходе файл 168 байт (без сжатия и оптимизации)


Top
   
PostPosted: Tue Sep 29, 2015 2:10 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Добавил стек функцию для команды ret, теперь нет бага "зависания" при выходе из функции.
Так же сделал маленькую оптимизацию против дублирования кода.

Теперь такая конструкция работает на ура :).

Code:
function input()
{
  ret='';
  print('Input: ');
  loop
  {
    s=getch();
    if(s==13)
    {
      return ret;
    }
    s=char(s);
    print(s);
    ret=ret+s;
  }
}

loop
{
   print("\n"+input()+"\n");
}


Attachments:
123.PNG
123.PNG [ 7.59 KiB | Viewed 2299 times ]
Top
   
PostPosted: Tue Sep 29, 2015 2:48 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
pavelyakov
А парсер языка на чём написан ?


Top
   
PostPosted: Tue Sep 29, 2015 3:28 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
(1)Сделал поддержку загрузки obj библиотек
(2)Исправил маленькие баги.
(3)Вызов функции по адресу в формате stdcall


Code:
dll_load("/sys/lib/console.obj");
c_init = dll_import('con_init');
c_printf = dll_import('con_printf');
c_init(-1,-1,-1,-1,'test');
c_printf('%s->%d','This integer:',123);


Результат:
Code:
This integer:->123


Top
   
PostPosted: Tue Sep 29, 2015 3:31 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Serge wrote:
pavelyakov
А парсер языка на чём написан ?

На php, все самописно, говорят что php медленно работает, но если лексемы переводить в массив и склеивать через implode, то скорость будет очень быстрая. Специально писал на php, чтобы можно было потом на бесплатный хостинг поставить :lol:
Как доделаю основы, скину на хост, чтобы могли пописать hello world :)
Без сложности его можно написать хоть на этом языке, ну или с некоторыми сложностями на Си, тогда разработка будет возможно с самой системы kolibri.


Top
   
PostPosted: Thu Oct 01, 2015 2:45 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Во время работы с виртуальной машиной, появилось идея, как можно ускорить скорость работы, а так же отделить от виртуальной машины приложение. Это простой компилятор, который компилирует приложение по структуре с виртуальной машиной, но в то же время, добавлять только те ф-ции, которые будет использовать разрабатываемое приложение. Скорость работы значительно возрастет, ведь не приейдется в цикле считывать байт код, а так же приложение будет не зависимо от ВМ.


Top
   
PostPosted: Thu Oct 01, 2015 3:27 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Сделал поддержу объектной части
Пока что не полностью
Code:
a=object(window); // определить объект как окно
a.left = 0;
a.top = 0;
a.width = 300;
a.height = 400;
create(a); // создать окно


Top
   
PostPosted: Thu Oct 01, 2015 5:58 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Добавил удобный редактор объектов
Code:
<window name='obj' onmousedown=func1 onmouseup=func2></window>

function func1()
{
  print('down');
}

function func2()
{
  print('up');
}


Top
   
PostPosted: Fri Oct 02, 2015 9:52 pm 
Offline

Joined: Sun Aug 09, 2015 3:41 pm
Posts: 109
omg


Top
   
PostPosted: Sat Oct 03, 2015 3:10 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1259
Да... Мне бы часть его энергии и энтузиазма...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 62 posts ]  Go to page Previous 1 2 3 4 5 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 4 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited