"hallo welt" mit BNF analysieren



  • hallo...

    könnte mir vielleicht jemand helfen ein kleines "HAllo Welt"-Programm mit Hilfe der BNF (ABNF) zu analysieren....

    #include <iostream> 
    
    int main() 
    {
      std::cout << "Hallo Welt!" << std::endl; 
    }
    

    thx

    lg



  • kann mir denn keiner helfen?



  • bnf beschreibt eine kontextfreie grammatik. du kannst also nicht ein hallo welt programm "mit hilfe der bnf" analysieren. du kannst höchstens eine vorliegende grammatik (in diesem fall die sprache c++ in bnf) hernehmen und prüfen, ob ein vorliegendes stück code entsprechend dieser grammatik korrekte syntax besitzt.



  • Mach deine Hausaufgaben alleine!



  • thordk schrieb:

    bnf beschreibt eine kontextfreie grammatik. du kannst also nicht ein hallo welt programm "mit hilfe der bnf" analysieren.

    Na ja, doch; denn das Programm selbst beschreibt ja auch eine Sprache, nämlich die Sprache, die genau aus diesem Programm besteht (und zufälligerweise eine Untermenge von C++ ist). Wir können daher, wenn wir uns auf ein Alphabet einigen (angenommen die Token-Menge von C++) durchaus eine BNF-Beschreibung dafür liefern (ohne Präprozessor; um zu vereinfachen):

    HelloWorld ::= 'int' 'main' '(' ')' '{' 'std' '::' 'cout' '<<' '"Hallo Welt!"' '<<' 'std' '::' 'endl' ';' '}';
    

    Wenn man jetzt weitere Beispiele dieser Sprache hätte, könnte man die Grammatik vereinfachen. Aber auf Basis der Daten ist das oben genannte alles, was wir zu der Sprache sagen können.



  • hi...

    natürlich bin ich nicht zu faul meine Hausaufgaben selber zu machen, weil es gar keine Hausübung ist.

    ich hätt mal meinen versuch für die erste zeile:

    #include <iostream>

    #include <iostream> ::= <preprocessing directives>
    <preprocessing directives> ::= <conrol line>
    <control line> ::= # include <preprocessing-tokens><new-line>
    <preprocessing-tokens> ::= ‘<’ <string-literal> ‘>’

    wäre super wenn ihr mir mal sagen könnt ob das so richtig ist



  • Kannst du bitte nochmal ganz genau erklären, was du vorhast? Für die Sprache C und C++ gibt es eine BNF-Grammatik (auch wenn ich mir nicht sicher bin, wo du die finden kannst), mit der könntest du dein Programm syntaktisch auseinandernehmen.


Anmelden zum Antworten