tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
873
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    simon1997 simon1997 ist offline Rookie
    Registriert seit
    Mar 2011
    Beiträge
    5
    Hallo, weiß wer, wie ich einen eigenen compiler für meine eigene Programiersprache mache?
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    ERstmal hab ich das Thema verschoben, in der Tutorials-Inbox hat das nix zu suchen!

    Zum Thema:
    Ein Kompiler ist eine Anwendung, die für eine bestimmte Sprache Quellcode parst und interpretiert und diesen dann in maschinennahe Sprache übersetzt. Kurz, ohne Assembler-Kenntnisse kommst du nicht weiter.

    Ich finde es jedoch höchst interessant, eine eigene Programmiersprache zu entwickeln, ohne sich mit dem Thema Compilerbau auseinanderzusetzen
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    master bratack master bratack ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Ort
    %ENV (Perl weiß es)
    Beiträge
    69
    Son quatsch! Wer dafür Assembler nimmt kann Photoshop in 0 und 1en programmieren. Nim C/C++, aber vorher, lies dich ein zum thema Compilerbau
     
    #MFG Bratack
    Coder

    Fragen zu Beiträgen bitte PN

  4. #4
    Avatar von m0dpad
    m0dpad m0dpad ist offline Mitglied Gold
    Registriert seit
    Mar 2011
    Beiträge
    122
    Natürlich braucht man auch Assembler oder ähnliches für einen Compiler, das macht ja genau ein Compiler! Ein C Compiler übersetzt C in Assembler bzw. Maschinensprache.

    @Topic : Deine Frage ist schwachsinnig eigentlich, das Ganze ist hoch kompliziert. Mal eben schnell eine eigene Programmiersprache entwickeln lol!
     
    Ideen oder Vorschläge für Video Tutorials ? Einfach Feedback geben!
    Mein Blog für Video Tutorials, vor allem PHP.

  5. #5
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Die Frage ist natürlich was für dich ein Compiler ist. Muss direkt eine ausführbare Datei dabei entstehen? Wäre es nicht auch möglich C-Code zu generieren aus deiner Sprache?

    Falls dem so ist, dann könntest du zum Beispiel mal anfangen gewisse Konzepte deiner Sprache zu überlegen. Daraus kannst du dann Regeln ableiten. Diese kannst du beispielsweise in einem Syntaxbaum dann umsetzen. Die entsprechenden Blätter kannst du dann in weiteren Code umwandeln.

    Ich habe mal eine einfache Sprache "entwickelt" welche auf sehr simplen Regeln basiert. Ein Beispiel ist folgendes:
    Code :
    1
    2
    3
    4
    
    Register(1) << Input
    Register(2) << Input
    Register(3) << Register(1) + Register(2)
    Output << Register(3)

    Dabei wurde dann diese Code in kompilierbaren C-Code umgewandelt und man konnte direkt einen standalone Compiler auswählen (wie cl.exe oder gcc) somit ist dann auch gleich eine Exe-Datei daraus entstanden.

    Das ist sicher ein guter Anfang um mit dem entwickeln von Sprachen anzufangen. Macht ausserdem auch sehr viel Spass
     
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  6. #6
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von master bratack Beitrag anzeigen
    Son quatsch! Wer dafür Assembler nimmt kann Photoshop in 0 und 1en programmieren. Nim C/C++, aber vorher, lies dich ein zum thema Compilerbau
    Vorsicht mit deinem Ton! Der Output eines Compilers ist Maschinencode. Der schreibt sich mit C/C++ aber weniger gut! Also wäre Assembler-Kenntnisse hier angebracht.
    Große Teile des Compilers können sicherlich in C geschrieben werden, an Kenntnissen einer Maschinesprache kommt man trotzdem nicht vor bei
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  7. #7
    master bratack master bratack ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Ort
    %ENV (Perl weiß es)
    Beiträge
    69
    Lexikalische Analyse etc. kann man doch in C machen, naja ich würde sagen alles.
    Als Output kann man doch jede Sprache kann man eigentlich nehmen welche man will, wobei traditionele Compiler nach ASM übersetzten. Man kann theoretisch doch gleich in Ausführbare dateien übersetzten, nicht? sonst müßte ja der erste ASM Compiler in 0 & 1 programmiert worden sein
     
    #MFG Bratack
    Coder

    Fragen zu Beiträgen bitte PN

  8. #8
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von master bratack Beitrag anzeigen
    Lexikalische Analyse etc. kann man doch in C machen, naja ich würde sagen alles.
    Natürlich, da hat doch auch keiner was dagegen.

    Zitat Zitat von master bratack Beitrag anzeigen
    wobei traditionele Compiler nach ASM übersetzten. Man kann theoretisch doch gleich in Ausführbare dateien übersetzten, nicht?
    Also, bei meinem Visual Studio machen mir Compiler und Linker eine exe, und keine .asm-Datei.

    Zitat Zitat von master bratack Beitrag anzeigen
    sonst müßte ja der erste ASM Compiler in 0 & 1 programmiert worden sein
    Wer sagt denn, dass das nicht so war?
    Ich war ja nicht dabei, aber wenn man eine Assembler machen will, ohne irgend ein derartiges Hilfsmittel zu haben...denk ich mal.

    Gruß
     

  9. #9
    master bratack master bratack ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Ort
    %ENV (Perl weiß es)
    Beiträge
    69
    Okay, das da ne exe raus kommt ist normal. Du musst dem Compiler sagen das er nur Compilieren soll, niicht assemblieren & linken.
    Als C++ programmierer geb ich folgendes BSP:
    DIe Datei m.cpp
    Code cpp:
    1
    2
    3
    4
    5
    
    #include <iostream>
    using namespace std;
    int main(void){
        cout << "Hallo Welt" << endl;
    }
    als compiler nehmen wir g++, also den C++ Compiler der GCC

    mit
    Code :
    1
    
    g++ m.cpp -o MainBSP
    Wird das Proramm erzeugt (bei mir keine Exe, weil ich Linux nutze). So gucken wir mal bei g++ --help.
    Da fnden wir
    [...]
    -S Compile only; do not assemble or link

    [..]
    Also nemen wir diese Option.
    Code :
    1
    
    g++ m.cpp
    Es müßte eine datei namens "m.s" erzeugt werden. Die öffnen wir & finden den Asm code.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    
        .file   "m.cpp"
        .local  _ZStL8__ioinit
        .comm   _ZStL8__ioinit,1,1
        .section    .rodata
    .LC0:
        .string "Hallo Welt"
        .text
    .globl main
        .type   main, @function
    main:
    .LFB963:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        movl    %esp, %ebp
        .cfi_offset 5, -8
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        subl    $16, %esp
        movl    $.LC0, 4(%esp)
        movl    $_ZSt4cout, (%esp)
        call    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
        movl    $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, 4(%esp)
        movl    %eax, (%esp)
        call    _ZNSolsEPFRSoS_E
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
    .LFE963:
        .size   main, .-main
        .type   _Z41__static_initialization_and_destruction_0ii, @function
    _Z41__static_initialization_and_destruction_0ii:
    .LFB972:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        movl    %esp, %ebp
        .cfi_offset 5, -8
        .cfi_def_cfa_register 5
        subl    $24, %esp
        cmpl    $1, 8(%ebp)
        jne .L2
        cmpl    $65535, 12(%ebp)
        jne .L2
        movl    $_ZStL8__ioinit, (%esp)
        call    _ZNSt8ios_base4InitC1Ev
        movl    $_ZNSt8ios_base4InitD1Ev, %eax
        movl    $__dso_handle, 8(%esp)
        movl    $_ZStL8__ioinit, 4(%esp)
        movl    %eax, (%esp)
        call    __cxa_atexit
    .L2:
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
    .LFE972:
        .size   _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
        .type   _GLOBAL__I_main, @function
    _GLOBAL__I_main:
    .LFB973:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        movl    %esp, %ebp
        .cfi_offset 5, -8
        .cfi_def_cfa_register 5
        subl    $24, %esp
        movl    $65535, 4(%esp)
        movl    $1, (%esp)
        call    _Z41__static_initialization_and_destruction_0ii
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
    .LFE973:
        .size   _GLOBAL__I_main, .-_GLOBAL__I_main
        .section    .ctors,"aw",@progbits
        .align 4
        .long   _GLOBAL__I_main
        .weakref    _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once
        .weakref    _ZL27__gthrw_pthread_getspecificj,pthread_getspecific
        .weakref    _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific
        .weakref    _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create
        .weakref    _ZL20__gthrw_pthread_joinmPPv,pthread_join
        .weakref    _ZL21__gthrw_pthread_equalmm,pthread_equal
        .weakref    _ZL20__gthrw_pthread_selfv,pthread_self
        .weakref    _ZL22__gthrw_pthread_detachm,pthread_detach
        .weakref    _ZL22__gthrw_pthread_cancelm,pthread_cancel
        .weakref    _ZL19__gthrw_sched_yieldv,sched_yield
        .weakref    _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock
        .weakref    _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock
        .weakref    _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock
        .weakref    _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock
        .weakref    _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init
        .weakref    _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy
        .weakref    _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast
        .weakref    _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal
        .weakref    _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait
        .weakref    _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait
        .weakref    _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy
        .weakref    _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create
        .weakref    _ZL26__gthrw_pthread_key_deletej,pthread_key_delete
        .weakref    _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init
        .weakref    _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype
        .weakref    _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy
        .ident  "GCC: (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292]"
        .section    .comment.SUSE.OPTs,"MS",@progbits,1
        .string "ospwg"
        .section    .note.GNU-stack,"",@progbits

    Das macht der Compiler. Das Linken & assemblieren gehören nicht zu seinem Job
    Geändert von master bratack (27.03.11 um 15:58 Uhr)
     
    #MFG Bratack
    Coder

    Fragen zu Beiträgen bitte PN

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 10.11.09, 15:10
  2. Datei-Eigner wird nicht angezeigt.
    Von ahykes im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 19.01.05, 09:26
  3. Eigner SMTP Server! Was bringt mir das?
    Von boeckerl im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 05.08.04, 16:37
  4. Eigner Logon-Bildschirm
    Von karldetlef im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 27.08.03, 13:39

Stichworte