Eigene Programmiersprache (scritpsprache)



  • Hi

    Ich möchte eine Programmiersprache (Also eher scriptsprache, wenns geht halt ne echte prog sprache aber ich denek dann braucht man assembler oder) machen. Wie ghesagt für ne echte progsprache breuchte ich assembler oder so aber dann nehme ich lieber ne scriptsprache für windows. es soll auch sowas wie einen compiler haben damit man den code nicht lesen kann. ich stelle es mir so vpr wie z.b bei php: man erstellt seien datei mit dem code und wenn man drauf klickt z.b mit doppelklick dann wird der code asugeführt also so wie bei php. Gibt es für sowas vielleicht tutorials??? Achso und ich möchte ganz klein anfangen also wirklich ganz leicht anfangen, Vielen Dank im Voraus 🙂



  • 1. was hat das mit MFC zu tun?
    2. wieso brauchst du dazu assembler? brauchst du nähmlich nicht! auch für nen compiler bau brauchst du assembler. das könntest du in C++ auch machen (was viele garnicht wissen. viele denken man muss dazu assembler benutzen).
    3. wozu brauchst du den eine eigene scriptsprache? reichen dir diese die es als angebot gibt etwa nicht?



  • 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