"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.