SDL Reader (Compiler/Parser)



  • Ich habe meine eigenen sprache SDL (ich hoffe mal die abkürzung gibts noch nicht) und einen dazugehörigen compiler/parser geschrieben.

    SDL (Structured Data Language)
    ist KEINE Programmiersprache sondern eine Auszeichnungssprache wie zb XML

    Gemacht habe ich das projekt weil ich lust dazu hatte.

    Der sprach syntax ist eigentlich ganz leicht

    <Bezeichner>="<Value>"[opt 😉

    TestEntry="text";
    TestEntry="text"
    TestEntry=14
    TestEntry;
    

    Elemente können innereinander verschachtelt werden

    Block
    {
      subBlock
      {
        subSubBlock {}
      }
    }
    

    kommentare sind wie bei c++

    //linien kommentar
    
    /*
     block
     kommentar
    */
    

    Ich habe auch ableitungen in meine sprache integriert
    <Bezeichner> : <Bezeichner2>

    wobei zu beachten ist das in der gleichen ebene gesucht wird in der auch Bezeichner 1 ist, wird dort Bezeichner2 nicht gefunden wird an oberster ebene danach gesucht
    beispiel

    MAIN
    {
      test 
      {
        subTest{var=14}
      }
      blockA
      {
        test="132"
        test2=456
      }
    
      blockB :  blockA
      {
    
      }
    
      blockC : MAIN.test.subTest
      {}
    
      blockE : subTest
      {
      }
    }
    

    blockB und blockC funktionieren beide
    da blockA in der gleichen ebene ist wie blockB

    blockC funktioniert da von oben weg gesucht wird

    blockE funktioniert nicht da subTest nicht in MAIN gefunden werden kann

    so und ein par Präprozessoranweisungen gibt es auch noch
    wobei ich glaube die sind selbsterklärend

    #define 
    #ifdef
    #ifndef
    #endif
    
    #include
    

    finden tut ihr das ganze hier http://bigbigmek.bi.ohost.de/projectU/test.zip

    ps:
    der Reader liest die datei MAIN.sdl ein von ihr aus können andere includiert werden.

    außerdem kann der reader mit einem parmter gestartet werden sdlReader_tester.exe <dateipfad>
    somit kann auch eine andere datei als MAIN.sdl geladen werden.

    nachdem einlesen ezeugt der Präprozessor eine zwischendatei
    temp.ppf
    eine datei in der die daten ein bischen anders gespeichert sind
    und zwei ausgabe dateien
    output.txt
    und
    output.xml

    wer fehler findet möge sie mir bitte posten.



  • Die Abkuerzung "SDL" ist sogar schon mehrfach belegt, sogar im Computerbereich: http://en.wikipedia.org/wiki/SDL (haettest du aber auch selbst nachgoogln koennen 😉 )



  • Hallo

    (ich hoffe mal die abkürzung gibts noch nicht)

    Simple DirectMedia Layer, seit 1998, is a cross-platform, free and open source software multimedia library written in C.

    Wie auch immer, ich schau mir das gerne mal an, sobald ich wieder Zeit habe 🙂

    @Blue-Tiger: Nein, 7 Sekunden! 😮

    MfG



  • da waren noch ein haufen fehler drinnen.
    Lade heute nochmal eine neue Version rauf.

    ps:
    mir ist aufgefallen das das freigeben des Reservierten speichers einiges mehr Zeit in anspruch nimmt als das Reserieren einlesen der Datei und parsen.

    schuld ist der code

    while (mTokenValueList.size() > 0)
      {
        delete mTokenValueList.back();
        mTokenValueList.pop_back();
      };
    

    mTokenValueList ist eine std::list<>
    wäre es schneller wenn ich mir da selber was schreibe?


Log in to reply