Компилятор ЯВЫ

High-level languages programming questions
  • Я же писал. Мой компилятор имеет много ограничений.
  • Knott, с удовольствием помогу тебе в написании проекта. Сам собирался этим заняться.
    В частности могу сделать лексический, синтаксический и семантический анализаторы.

    Не смог понять из постов (может невнимательно прочел), на чем написан твой нынешний компилятор?
  • Так, давай раставем фсе точки над i.

    Сначало это был компилятор, но потом, после посешения стешнего IRC, миня уговорили делать виртуальную машину. Причем не Java, а .NET .
    После долгого времяни, писания прототипов, чтения документации(О процессорах, о виртуальных машинах, о компиляторов(И CIL и Native)),
    я понил - .NET, с его хитро-вы****ым JIT мине не асилить. Да и недумаю что Kolibri поташил бы мою расработку(Веть песать нада на АСМ).
    После этого я решил углубится в Java VM. Мне понравилось то что остоваясь высокоуровневой виртуальной машиннай, она имеет незкоуровневый дизайн(Что добовляет скорости). Все же я решил делать компилятор из компилированых Java байткадофф в native кот. Тоесть некаких анализаторов.

    Но потом я буду заниматся "своим" компайлером.

    Пишу я на C#.
  • Гм... за Java VM респект.
    Только вот я вижу гораздо больше смысла в написании полноценного интерпретатора под KoOS, потому что, написав транслятор "из компилированых Java байткадофф в native кот", мы не сможем полноценно программить без сторонних ОС. А хочецо! )
    С другой стороны, написание упомянутого транслятора на ЯВУ гораздо проще и приятнее, чем на АСМ.

    Интересна следующая идея:
    1) пишем транслятор
    2) на Java пишем VM или что-то подобное..
    3) транслируем под KoOS
    4) правим баги )
    5) радуемсо :-D

    PS. Приведи ссылки на те материалы, которые ты курил в эту тему.
  • Я счас набралсо опыта. И в принципе могу писать Яво ВМ пот коос.
    Толька мне нужна помосч!.

    Толька на чем песать? На Си(Бес ПП) или на Асм?

    Есле что, стучитесь в асю 307435176.

    Зы. Запыл про сцылке :)

    Первым делом это VM Спек:
    http://java.sun.com/docs/books/jvms/sec ... C.doc.html

    Потом онлайн опкоде референс:
    http://mrl.nyu.edu/~meyer/jvmref/ref-Java.html
  • Ъняъпз леимпмоме аоекз, з дмюуйъз леимпмоьс оецяйщпчпма.

    Code: Select all

    format ELF
    
    
    
    ; Ыпмп кепмд ле лятел...
    ; Уънмйщяцепъз пмйщим дйз имлъпояипмоч мюгеипч Entrypoint
    ; (Импмоьх ле лятел - уюм Entrypoint леимдч ле ъмцдчёпъз).
    
    
    ; Method: knott/Entrypoint#<init>!()V
    
    ;public Q25knott10Entrypoint233cinit3e2e2829V
    
    ;Q25knott10Entrypoint233cinit3e2e2829V:
    
    ;	push ebp
    
    ;	mov ebp,esp
    
    ;	sub esp,8
    
    ;	.JL_0:
    
    ;	.JL_1:
    
    ;	push dword [ebp+-4]
    
    ;	call Q34java4lang6Object233cinit3e2e2829V
    
    ;	.JL_4:
    
    ;	jmp .footer
    
    ;	.footer:
    
    ;	add esp,8
    
    ;	mov esp,ebp
    
    ;	pop ebp
    
    ;	ret
    
    
    ; Method: knott/Entrypoint#main!([Ljava/lang/String;)V
    
    public Q25knott10Entrypoint23main2e285bLjava2flang2fString3b29V
    
    Q25knott10Entrypoint23main2e285bLjava2flang2fString3b29V:
    
    	push ebp
    
    	mov ebp,esp
    
    	sub esp,24
    
    
    	.JL_0:
    
    	call Q25knott10Entrypoint23getZeroLong2e2829J
    
    	.JL_3:
    
    	mov [ebp+-8],eax
    
    	mov [ebp+-12],ebx
    
    	.JL_4:
    	.JL_5:
            ; For compability...
    	mov [ebp+-16],0
    	mov [ebp+-20],0
    
    	.JL_6:
    
    	.JL_7:
    
    	.JL_8:
    
    	push dword [ebp+-8]
    
    	push dword [ebp+-12]
    
    	push 0
    
    	push 0
    
    	call Q25knott10Entrypoint23compareLongs2e28JJ29Z
    
    	.JL_11:
    
    	mov [ebp+-24],eax
    
    	.JL_13:
    
    	.JL_15:
    
    	mov eax,[ebp+-24]
    
    	cmp eax,0
    
    	jne .JL_21
    
    	.JL_18:
    
    	call Q25knott10Entrypoint23hello2e2829V
    
    	.JL_21:
    
    	jmp .footer
    
    
    	.footer:
    
    	add esp,24
    
    	mov esp,ebp
    
    	pop ebp
    
    	ret
    
    
    ; Method: knott/Entrypoint#hello!()V
    
    public Q25knott10Entrypoint23hello2e2829V
    
    Q25knott10Entrypoint23hello2e2829V:
    
    	.JL_0:
    
    	.JL_2:
    
    	push 104
    
    	call Q25knott10Entrypoint23outch2e28C29V
    
    	.JL_5:
    
    	.JL_7:
    
    	push 101
    
    	call Q25knott10Entrypoint23outch2e28C29V
    
    	.JL_10:
    
    	.JL_12:
    
    	push 108
    
    	call Q25knott10Entrypoint23outch2e28C29V
    
    	.JL_15:
    
    	.JL_17:
    
    	push 108
    
    	call Q25knott10Entrypoint23outch2e28C29V
    
    	.JL_20:
    
    	.JL_22:
    
    	push 111
    
    	call Q25knott10Entrypoint23outch2e28C29V
    
    	.JL_25:
    
    	jmp .footer
    
    	.footer:
    
    	ret
    
    
    ; Method: knott/Entrypoint#getZeroLong!()J
    
    public Q25knott10Entrypoint23getZeroLong2e2829J
    
    Q25knott10Entrypoint23getZeroLong2e2829J:
    
    	.JL_0:
    
    	.JL_1:
    
    	xor eax,eax
    
    	xor ebx,ebx
    
    	jmp .footer
    
    	.footer:
    
    	ret
    
    
    ; Method: knott/Entrypoint#compareLongs!(JJ)Z
    
    public Q25knott10Entrypoint23compareLongs2e28JJ29Z
    
    Q25knott10Entrypoint23compareLongs2e28JJ29Z:
    
    	push ebp
    
    	mov ebp,esp
    
    	sub esp,12
    
    	.JL_0:
    
    	.JL_1:
    
    	.JL_2:
    
    	mov edx,[ebp+-12]
    
    	mov ecx,[ebp+-16]
    
    	mov ebx,[ebp+16]
    
    	mov eax,[ebp+12]
    
    	sub edx,ebx
    
    	test edx,edx
    
    	je .dl1
    
    	cmp edx,0
    
    	jl .dl2
    
    	jmp .dl3
    
    	.dl1:
    
    	sub ecx,eax
    
    	test ecx,ecx
    
    	je .dl4
    
    	cmp ecx,0
    
    	jl .dl2
    
    	jmp .dl3
    
    	.dl2:
    
    	mov eax,-1
    
    	jmp .dl5
    
    	.dl3:
    
    	mov eax,1
    
    	jmp .dl5
    
    	.dl4:
    
    	mov eax,0
    
    	.dl5:
    
    	.JL_3:
    
    	cmp eax,0
    
    	jle .JL_8
    
    	.JL_6:
    
    	.JL_7:
    
    	mov eax,1
    
    	jmp .footer
    
    	.JL_8:
    
    	.JL_9:
    
    	xor eax,eax
    
    	jmp .footer
    
    	.footer:
    
    	add esp,12
    
    	mov esp,ebp
    
    	pop ebp
    
    	ret
    
    
    extrn Q34java4lang6Object233cinit3e2e2829V
    
    extrn Q25knott10Entrypoint23outch2e28C29V
    
    
    Ыпм ъйежич ночайельх(Пмблее мпрмокмпуомачлуьх) имд - оецяйщпчп очюмпь кмежм почлъйзпмоч...
    Амп уъсмдльх имд, уъ ичпмомжм з имкнуйуй.

    Code: Select all

    package knott;
    
    public class Entrypoint {
    
        // Main entrypoint method.
        public static void main(String[] args) {
             long a = getZeroLong();
             long b = 0;
    
             boolean b = compareLongs(a, b);
    
             if (b == false) {
                 hello();
             }
        }
    
        //  native - оечйуцчфуз кепмдч, лч мпйублмк мп заь
        //  омдлмк зцьие.
        private static native void outch(char arg0);
    
        private static void hello() {
            outch('H'); outch('e'); outch('l');
            outch('l'); outch('o');
        }
    
        private static long getZeroLong() {
            return 0;
        }
    
         private static boolean compareLongs(long a, long b) {
              return (a > b);
         }
    }
    
    

    А нйчле ъдейчпщ улйчхлулж(Мъмюм чипячйел дйз заь - уюм уънмйщцявпъз имомпиуе кепмдь).
    Еъйу ъухбчъ ъдейчпщ улйчхл мнпукуцчфуу(Лч яомале ючхп имдма заь), пм нмйябупъз пчимх имд.

    Code: Select all

    main:
    	.JL_0:
    	.JL_2:
    	push 104
    	call Q25knott10Entrypoint23outch2e28C29V
    	.JL_5:
    	.JL_7:
    	push 101
    	call Q25knott10Entrypoint23outch2e28C29V
    	.JL_10:
    	.JL_12:
    	push 108
    	call Q25knott10Entrypoint23outch2e28C29V
    	.JL_15:
    	.JL_17:
    	push 108
    	call Q25knott10Entrypoint23outch2e28C29V
    	.JL_20:
    	.JL_22:
    	push 111
    	call Q25knott10Entrypoint23outch2e28C29V
    	ret
    
    Пчи номуцмхдёп ноу нмйлмк улйчхлулже. Пмеъпщ ъдейма улйчхл, имкнуйзпмо нмхкёп бпм аеъде уънмйцявпъз имлъпчлпь, у оецяйщпчп аьбуъйелуз (b == false) уцаеъпел
    ам аоекз имкнуйзфуу. Кепмд hello пмте улйчхлупъз(Ноу яъймауу b == true мл пмте юядеп улйчхлупъз, лм нмъйе мнпукуцчфуу Dead code elimination ядчйупъз =) ).

    Дчк леимпмоье мюгзълелуз нм имдя:

    Цчбек аеъде ыпу .JL_XX?
    Ыпм чдоеъч ючхп имдма заь. Пмеъпщ JL_00 ъммъпаепъаяеп улпъояифуу нмд чдоеъмк 0. Ч JL_22, нмд 22h.
    Улмждч юьачеп бпм нмд улъпояифех лепя улъпояифух - ыпм юьачеп йуюм нмпмкя бпм улъпояифуз ле укнйекелпуомачлч,
    уйу номъпм лелятлч.

    Нмбекя ноу

    Code: Select all

        // Main entrypoint method.
        public static void main(String[] args) {
             long a = getZeroLong();
             long b = 0;
    
             boolean b = compareLongs(a, b);
    
             if (b == false) {
                 hello();
             }
        }
    
    Ноу аьцмае compareLongs, уцаеъплм бпм b имлъпчлпч, лм а имде

    Code: Select all

            ; Дояжмх имд
    	.JL_4:
    	.JL_5:
            ; For compability...
    	mov [ebp+-16],0
    	mov [ebp+-20],0
    
    	.JL_6:
    	.JL_7:
    	.JL_8:
    	push dword [ebp+-8]
    	push dword [ebp+-12]
    
    	push 0
    	push 0
    	call Q25knott10Entrypoint23compareLongs2e28JJ29Z
    
    Имлъпчлпч ъмсочлзепъз ичи ймичйщлчз неоекеллчз, лм а ъпеи, неоедчёпъз ълмам ичи имлъпчлпч... Цчбек?
    Ыпм юьйм ъдейчлм лч аъзиух ъйябух - еъйу неоекеллчз аьсмдуп цч ноедейь "номъпмжм юймич", пм млч дмйтлч юьпщ а ймичйщлмх неоекеллмх.
    Ч ъехбчъ, мнпукуцчфуу пунч "Номъпьс юймима" ле оечйуцмачлч...
  • Vot blin...
    Whata fuck?
  • Да не переживай, с кем не бывает! :D
  • Глянь суда. ИМХО но ява для десктопных приложений нафиг никому не нужна.

    http://download.java.net/jdk6/
    http://java.sun.com/javase/downloads/index.jsp

    Вроде как сорцы виртуальной машины Java 2SE стали доступны.
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • Интерпретатор JAVA-подобного языка https://github.com/edynox/IFJ.
    Собрать под KolibriOS просто, но нужно ли. Просто информация.
  • Who is online

    Users browsing this forum: No registered users and 1 guest