Eigene Programmiersprache (scritpsprache)



  • Hallo,
    ich hab schonmal sowas programmiert, nur das meine Programmiersprache nicht in Maschinen-Code geschrieben wird...
    Sind noch ein paar Fehler drin:

    int main(void) // Einstiegs-Position
    {
    Compilieren("D:\\Code\\script.scr");
        return 0;
    }
    
    bool Compilieren(char* szFile)
    {
        FILE *File;
        char *msg;
        char *wert;
        char *buffer;
        char *buffer1;
        bool comment = false;
        int row = 0;
        int result1,result2;
        msg  = (char *) malloc(100);
        wert = (char *) malloc(100);
        File = fopen(szFile,"r");
        if (File != NULL)
        {
            while(!feof(File) )
            {
                fgets(msg,100,File);
                row++;
                if((msg[0] == '/' && msg[1] == '/'))
                    continue;
                if((buffer = strchr(msg,'/')) != NULL && (buffer1 = strchr(msg,'*')) != NULL)
                {
                    result1 = buffer - msg;
                    result2 = buffer1 - msg;
                    if(result1 < result2)
                    {
                        comment = true;
                        continue;
                    }
                    else if(result1 > result2)
                    {
                        comment = false;
                        continue;
                    }
                }
                else if(comment == true)
                    continue;
                else if(strchr(msg,'(') != NULL)
                {
                    buffer = GetFunction(msg);
                    if(strcmp(buffer, "Say") == 0)
                    {
                        if(GetCharPar(0,msg) != NULL)
                        {
                            Say(GetCharPar(0,msg));
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
                    else if(strcmp(buffer, "SayC") == 0)
                    {
                        if(GetCharPar(0,msg) != NULL)
                        {
    
                            SayC(GetCharPar(0,msg),GetIntPar(1,msg));
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
                    else if(strcmp(buffer, "Play") == 0)
                    {
                        if(GetIntPar(0,msg) != 0 && GetIntPar(1,msg) != 0)
                        {
    
                            Play(GetIntPar(0,msg),GetIntPar(1,msg));
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
                    else if(strcmp(buffer, "SleepS") == 0)
                    {
                        if(GetIntPar(0,msg) != 0 )
                        {
    
                            Sleep(GetIntPar(0,msg)*1000);
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
                    else if(strcmp(buffer, "SleepM") == 0)
                    {
                        if(GetIntPar(0,msg) != 0 )
                        {
                            Sleep(GetIntPar(0,msg));
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
                    else if(strcmp(buffer, "SayBox") == 0)
                    {
                        if(GetCharPar(0,msg) != NULL && GetCharPar(1,msg) != NULL )
                        {
                            MessageBox(NULL,GetCharPar(0,msg),GetCharPar(1,msg),MB_OK);
                        }
                        else
                        {
                            printf("Fehler : Ein Parameter gleich null?");
                        }
                    }
    
                    else
                    {
                        printf("%s : Befehl nicht deklariert",GetFunction(msg));
                    }
                }
                else if(strchr(msg,' ') != NULL)
                {
                    //type = VAR;
                }
                else
                {
                    printf("Syntaxfehler: %s in Zeile %d\n",msg,row);
                }
                continue;
            }
        }
        return TRUE;
    }
    
    void Say(char* szMessage)
    {
        for(unsigned int i = 0;i < strlen(szMessage);i++)
        {
            if(szMessage[i] == '\\' && szMessage[i+1] == 'n')
                printf("\n");
            else if(szMessage[i] == '\\' && szMessage[i+1] == 'r')
                printf("\r");
            else if(szMessage[i] == '\\' && szMessage[i+1] == '0')
                printf("%c",0);
            else if(szMessage[i] == '\\' && szMessage[i+1] == '1')
                printf("%c",1);
            else if(szMessage[i] == '\\' && szMessage[i+1] == '2')
                printf("%c",2);
            else
                 if(!(szMessage[i-1] == '\\') && !(szMessage[i] == '\"'))
                    printf("%c", szMessage[i]);
    
        }
        i=0;
    }
    
    void SayC(char* szMessage, int Delay)
    {
        for(unsigned int i = 0;i < strlen(szMessage);i++)
        {
            if(szMessage[i] == '\\' && szMessage[i+1] == 'n')
                printf("\n");
            else if(szMessage[i] == '\\' && szMessage[i+1] == 'r')
                printf("\r");
            else if(szMessage[i] == '\\' && szMessage[i+1] == '0')
                printf("%c",0);
            else if(szMessage[i] == '\\' && szMessage[i+1] == '1')
                printf("%c",1);
            else if(szMessage[i] == '\\' && szMessage[i+1] == '2')
                printf("%c",2);
            else
                 if(!(szMessage[i-1] == '\\') && !(szMessage[i] == '\"'))
                    printf("%c", szMessage[i]);
            Sleep(Delay);
    
        }
        i=0;
    }
    
    void Play(int Frequency, int Duration)
    {
      unsigned long dwVersion = GetVersion();
    
      if (dwVersion < 0x80000000)
        Beep (Frequency, Duration);
      else
      {
        unsigned short pitch = (unsigned short) (Frequency);
        __asm mov bx, pitch
        __asm mov ax, 34DDh
        __asm mov dx, 0012h
        __asm cmp dx, bx
        __asm jnb Stop
        __asm div bx
        __asm mov bx,ax
        __asm in al, 61h
        __asm test al, 3
        __asm jne J1
        __asm or al, 3
        __asm out 61h, al
        __asm mov al, 0B6h
        __asm out 43h, al
        J1:
        __asm mov al, bl
        __asm out 42h, al
        __asm mov al, bh
        __asm out 42h, al
        Stop:
        Sleep(Duration);
        __asm in al, 61h
        __asm and al, 0fch
        __asm out 61h, al
      }
    }
    

    Inhalt der Datei:

    String abc; // String deklarieren
    Say("Hallo\n"); 
    SleepS(1); // S = Sekunde, also 1 Sekunde "schlafen"
    SayC("Tima\n",100); // Wieder etwas ausgeben
    Play(256,20);
    Say("In 2 Sekunden wird eine\nMessageBox aufgerufen...");
    SleepS(2);
    SayBox("Hallo","Hello Box");
    

    Du wirst ja schon sehen was rauskommt 🙂



  • ok cool bloß assembler naja assembler ist zimlich schwer und deswegen wär reines c++ meine erst wahl 🙂 zur not tuts auch nur ne script sprache. Könnt ihr mir das weiter helfen es nur in c++ zu machen will jetzt nicht noch assembler lernen müsse ausser ihr kennt ein anfänger freundliches tut das was ich hier im faq board finde ist nichts für mich ich kapier dasm it registern udn os nicht... vielen Dank für weitere hilfe



  • Gibt es vielelicht auch tuts??? und bitte helftm ir weiter 🙂



  • Darüber gibts Bücher. Kauf dir eins. 🙂



  • echt haste welche??? oder sag ma name





  • hmm ich breuchte schon was in deutsch



  • Dann geh auf amazon.de und suche nach Compilerbau/Übersetzerbau.



  • Um auch noch mein Senf dazuzugeben .. Es gibt 2 Richtungen die man gehen kann.. Dies des fetten Codebeispiels von oben..

    << Interpreter >>

    Wenn du nen richtigen << Compiler >> entwickeln willst sag ich dass du es schwer haben wirst, denn du wirst dich erstmal sehr intensiev mit den
    x86 Prozessor auseinandersetzen dürfen.. Mein Tip .. stell ein Team zusammen
    um etwas erreichen zu können, bloß könnte man das nur verstehen wenn dir
    wirklich nur um den Sinn an der Sache, nicht ums Ergebnis geht 🙂

    mfg



  • Der bringt das doch sowieso nicht zustande, könnt ihr ihm Tipps geben wie ihr wollt. 🙂



  • nagut ichbleib bei ner script sprache gibt es dazu vielleicht tuts im inet oder so????



  • Trottel



  • feigling noch nicht ma mit name!



  • :p

    Kannst du dich nicht mal selbst auf die Suche begeben? Meiner Meinung steckst du dir viel zu hohe Ziele. So wie du dich hier verhälst, sieht das nicht so aus, als wenn du in der Lage bist sowas zu programmieren.



  • War mein Beitrag nicht gut? *snüff* 🙂
    Das mit dem __asm war ja nur für den PC-Speaker gedacht. kannst du auch weglassen, musst nur die Funktion aus dem Interpret rauslöschen, und schon gehts 🙂 Irgendwie war das doch reines C++(oder auch C)

    Naja ciao!!! 🙂


Anmelden zum Antworten