Probleme mit Grammatik-Aufgabe (blutiger Anfänger)
-
Hier gehts um Grammatiken (sprich theoretische Informatik) und in seiner Aufgabe gehts darum, ob ein Konstrukt Element von L(G) ist. Gehört also eher ins "Rund um die Programmierung" Forum.
-
this->that schrieb:
Hier gehts um Grammatiken (sprich theoretische Informatik) und in seiner Aufgabe gehts darum, ob ein Konstrukt Element von L(G) ist. Gehört also eher ins "Rund um die Programmierung" Forum.
Das sind die Momente, in denen ich mir immer wieder selber dafür gratuliere, dass ich nicht studiert habe.
PS: Danke für die Erklärung.
mfg, René~
-
RuggedC schrieb:
so ich hab nun eine Lösung gefunden..kann mir denn jemand sagen ob es so richtig ist?
-start
x --> y wegen (p1)
y --> y%Z wegen (P4)
y%Z --> y%(x) wegen (P6)
y%(x) --> y%(y) wegen (p1)
y%(y) --> y%(y%z) wegen (p4)
y%(y%z) -->z%(z%z) wegen (P3)
---> 3%(5%2) wegen(P5)Ja, das is richtig.
-
NewSoftzzz schrieb:
this->that schrieb:
Hier gehts um Grammatiken (sprich theoretische Informatik) und in seiner Aufgabe gehts darum, ob ein Konstrukt Element von L(G) ist. Gehört also eher ins "Rund um die Programmierung" Forum.
Das sind die Momente, in denen ich mir immer wieder selber dafür gratuliere, dass ich nicht studiert habe.
Wenn du jemals einen Parser schreiben willst, gib mir bitte rechtzeitig vorher Bescheid, dass ich noch Popcorn machen kann. Dieses Zeug ist verdammt praktisch zu kennen, wenn man mal Eingabedaten verarbeiten will, die komplizierter als CSV sind.
Dieses Beispiel ist übrigens schon sehr nah der Grammatik eines rudimentären Taschenrechners für Infix-Ausdrücke. Sei G' = (N', T', S, P') mit
N' = N ⋃ { #, % }
T' = T ⋂ { #, % } ⋃ { +, -, *, / }
P' = P ⋃ {
# → -,
# → +,
% → *,
% → /
}...und wir können prima abstrakte Syntaxbäume für 2 + 3 * (4 * 5 + 6) etc. generieren. Soviel zum Thema Praxisnähe.
-
seldon schrieb:
Wenn du jemals einen Parser schreiben willst, gib mir bitte rechtzeitig vorher Bescheid, dass ich noch Popcorn machen kann. Dieses Zeug ist verdammt praktisch zu kennen, wenn man mal Eingabedaten verarbeiten will, die komplizierter als CSV sind.
Hm, ich habe einen funktionierenden HTTP Parser geschrieben und das völlig ohne dieses komische Grammatikzeugs. Und ich meine jetzt einen richtigen Parser, der Byte für Byte einzeln verarbeitet, ohne Regexs oder sowas. Was sagt dein Unigott nun?
mfg, René~
-
Dass HTTP-Nachrichten nicht wesentlich komplexer (sondern sogar etwas einfacher) als CSV sind; es läuft im wesentlichen auf Zeilen der Form "Schlüssel: Wert" hinaus. Warum sollte man das überhaupt zeichenweise parsen wollen? istringstream und getline, gut ist.
Wenn du es ohne "dieses komische Grammatikzeugs" hinkriegst, beispielsweise einen XML-Parser zu schreiben, bin ich beeindruckt - nicht, dass ich das ernsthaft von jemandem erwarten könnte, der in einer Diskussion über eine kontextfreie Grammatik von regulären Ausdrücken faselt.
-
seldon schrieb:
Wenn du es ohne "dieses komische Grammatikzeugs" hinkriegst, beispielsweise einen XML-Parser zu schreiben, bin ich beeindruckt
Sie, mein Herr, haben leider keine Ahnung. XML ist *wesentlich* einfacher als ein HTTP multipart/form-data Upload mit Binärdaten, mehreren Feldern usw.
Außerdem parse ich die Header nicht einfach nur als key:value sondern ich verarbeite direkt den Value, hole also z.B. die einzelnen Cookies raus, unescape URL-Escaped Sequenzen, verifiziere UTF8 Sequenzen usw. usf.
mfg, René~
-
NewSoftzzz schrieb:
Ich hab keine Ahnung wovon du redest, und ich weiß nicht ob es hier im Forum jemanden gibt, bei dem es anders ist.
also deinem nickname anch zu urteilen bist du nicht älter als 15
hast dir dreimal z.b. c++ angeguckt auf shade of mine's tutorial seite oder bei volkard und dir wegen deinem html kram mal ne lib runtergeladen...aber das glaube ich kaum:
ich glaube eher du hast eine ausbildung gemacht die dir praxisnähe ohne theoretische grundlage gegeben hat dass du möglichst schnell ein paar zeilen code schreiben kannstwas passiert denn wenn die nächste generation der programmiersprachen kommt oder sogar der computer (nicht binär system sondern z.B. hexadezimal)
dann hast du dein wissen, du hast ein problmen zu lösen, und dein wissen bringt dir en müll (also quasi wien pascal programmeirer allein in der wüste ohne wasser
)@threadersteller
du musst dich nicht als unwissender outen...
das zeug ist im prinzip gar nicht schwer, aber dann doch irgendwie wieder (wie pointer)
aber wenn dus einmal raus hast dann schaffst dus
allerdings solltest du dich ein bisschen mehr mit der materie befassen, weil das ganze aussieht wie: "mh ne aufgabe die ich machen muss - mh mein erster (doofer) ansatz klappt nicht. wo krieg ich die lösung her ?"
-
Skym0sh0 schrieb:
ich glaube eher du hast eine ausbildung gemacht die dir praxisnähe ohne theoretische grundlage gegeben hat dass du möglichst schnell ein paar zeilen code schreiben kannst
Nein, ich habe überhaupt gar keine Ausbildung, ich bin Autodidakt, war schon in 2 Firmen als festangestellter Programmierer tätig, eine davon eine Bude mit Enterprise Kunden, die ihre Software in JAVA erstellen (und die haben mich angestellt, obwohl ich keine Ausbildung habe). Alle anderen Programmierer dort waren Diplominformatiker. Und weeßte was? Die haben ihren Job nicht besser gemacht als ich. In manchen Bereichen (z.B. IT Security) hatte ich auch viel mehr drauf als alle anderen zusammen.
Skym0sh0 schrieb:
was passiert denn wenn die nächste generation der programmiersprachen kommt oder sogar der computer (nicht binär system sondern z.B. hexadezimal)
Es ist ja auch so schwer eine neue Programmiersprache zu lernen, wenn man einmal programmieren kann. Ich hab in meinem Job mal in 1 Woche einen Filemanager in Ruby on Rails programmiert inklusive Rechtemanagement, unbegrenzte Ordnerebenen, hacksicher usw. und das ohne jemals 1 Zeile RoR vorher programmiert zu haben.
PS:
Skym0sh0 schrieb:
dir wegen deinem html kram mal ne lib runtergeladen...
Ich benutze gar keine library außer boost.
mfg, René~
-
Ein multipart/form-data-Upload ist für HTTP strikt Payload, was die entsprechende RFC übrigens auch explizit so sagt:
RFC 2616 (HTTP 1.1), 3.7.2 schrieb:
In general, HTTP treats a multipart message-body no differently than any other media type: strictly as payload. The one exception is the "multipart/byteranges" type (appendix 19.2) when it appears in a 206 (Partial Content) response, which will be interpreted by some HTTP caching mechanisms as described in sections 13.5.4 and 14.16. In all other cases, an HTTP user agent SHOULD follow the same or similar behavior as a MIME user agent would upon receipt of a multipart type. The MIME header fields within each body-part of a multipart message- body do not have any significance to HTTP beyond that defined by their MIME semantics.
Wenn du MIME im HTTP-Parser verarbeitest, solltest du dein Modell überdenken.
MIME ist deutlich komplexer als HTTP; vernünftig implementiert benötigt es einen Stapelautomaten (d.h. kontextfrei). Der Hintergrund ist, dass Teile einer multipart-MIME-Nachricht wieder MIME-Nachrichten enthalten können. Wenn du das ohne Kenntnis formaler Sprachen hingekriegt hast, ist das was anderes, aber das glaube ich erst, wenn ich es sehe.
Der Dunning-Kruger-Effekt ist dir ein Begriff?
-
seldon schrieb:
Der Dunning-Kruger-Effekt ist dir ein Begriff?
Ja, mein Freund, der ist mir ein Begriff. Aber darauf zu verweisen nachdem ich dir jedes deiner Argumente zerlegt habe ist erbärmlich und als Totschlagargument anzusehen.
seldon schrieb:
Wenn du MIME im HTTP-Parser verarbeitest, solltest du dein Modell überdenken.
Warum sollte ich? Es funktioniert hervorragend und ist in meinem Framework die optimalste Lösung.
seldon schrieb:
MIME ist deutlich komplexer als HTTP; vernünftig implementiert benötigt es einen Stapelautomaten (d.h. kontextfrei). Der Hintergrund ist, dass Teile einer multipart-MIME-Nachricht wieder MIME-Nachrichten enthalten können.
Ich weiß, dass das theoretisch rekursiv sein kann und das hätte ich auch "ohne Kenntnis formaler Sprachen" programmieren können (ich hatte das schon konzipiert), dann ist mir allerdings aufgefallen, dass ich keinen einzigen praktischen Fall kenne, wo das beim HTTP Upload auftritt (Ich schreibe ja keinen Parser für die Allgemeinheit sondern nur einen auf meine Bedürfnisse zugeschnittenen).
Kannst du mir einen praktischen Fall sagen, wo bei einem HTTP Upload MIME geschachtelt ist? Und ich rede jetzt nicht davon, dass du z.B. eine Email als Datei hochlädst, dann hätte man theoretisch ne Schachtelung aber das soll logischerweise nicht geparsed werden.
mfg, René~
-
Naja... sooo schwer sind Grammatiken nu auch wieder nicht. Natürlich, es kann beliebig komplex werden, aber man fängt ja für gewöhnlich auch klein an. Irgendwann wird man dann über die richtige Lösung stolpern und wohl unbewusst Gramatiken verwendet haben.
Btw. mag subjektiv sein, aber beim Compilerbau finde ich persönlich es schwerer, Code zu generieren als irgendwas zu parsen und Bäume aufzubauen.
B2T, jedenfalls etwas. Falls der Threadersteller häufiger mal prüfen muss, ob ein Wort in einer Grammatik ist, kann man das prima mit Prolog machen. Das geht auch schon mit simplen Sprachkenntnissen und man bekommt etwas Wissen in Automatentheorie, ist doch auch immer ganz nett

-
-Shelling- schrieb:
Naja... sooo schwer sind Grammatiken nu auch wieder nicht. Natürlich, es kann beliebig komplex werden, aber man fängt ja für gewöhnlich auch klein an. Irgendwann wird man dann über die richtige Lösung stolpern und wohl unbewusst Gramatiken verwendet haben.
_DAS_ kann natürlich sein. Es geht vielleicht schneller wenn man sich den Theoriekram reinzieht, aber es geht auch so. Irgendwer muss dieses "Grammatik"zeugs ja auch mal erfunden haben, oder?
-Shelling- schrieb:
Btw. mag subjektiv sein, aber beim Compilerbau finde ich persönlich es schwerer, Code zu generieren als irgendwas zu parsen und Bäume aufzubauen.
Dito.
@Bashar: Arroganz bedeutet sich über jemanden oder etwas zu stellen. Für sich selbst zu beanspruchen etwas zu können ist einfach nur selbstbewusst. Also lerne erstmal die Worte, die du benutzt, bevor du damit um dich wirfst.
mfg, René~
-
Bashar schrieb:
Du stellst dich über die, die die Theorie zu ihrem Handwerk beherrschen, wenn du behauptest, dass man die nicht braucht und du das auch ohne kannst.
Psychologie <3. Weißt du, was kognitive Dissonanz ist? Das Problem hast du gerade hier. Ich kann das auch nachvollziehen. Wenn man die Sachen wirklich ohne Theorie kann, dann löst das in dir "einen als unangenehm empfundenen Gefühlszustand" aus, da du dich gerade fragst, warum du es gelernt hast. Und dann kommt die kognitive Dissonanz hervor, die darin resultierst, mir Arroganz zu unterstellen. Herrlich! 10/10.
this->that schrieb:
Mag sein. Bei deiner Einstellung zum Thema Theorie kann ich mir die Komplexitaet deiner Taetigkeiten sehr gut vorstellen.

Das hingegen ist arrogant oder vielleicht auch nur anmaßend. Ich kann dir ja sagen was ich in den letzten Monat entwickelt habe von Grund auf (alles in C++ und komplett selbst entwickelt):
HTTP Server, angepasster HTTP Parser (wie oben beschrieben), Framework mit IoC, ziemlich hoher Performance usw.
Darauf aufbauend dann ein Browsergame, das potenziell nach Leistungstest zehntausende Spieler gleichzeitig verarbeiten kann, mit Echtzeit Kampfsystem, Pathfinding, Community-Features wie Forum, PM-System, Gilden, hochladbare Avatare usw... KI kommt als nächstes rein. Und das alles ohne Uni-Theorie... abooooow!Und das ganze ziemlich hacksicher. Wohingegen die "Enterprise-Anwendung" meiner alten Firma nur so vor Sicherheitslücken ÜBERGEQUOLLEN ist. Und die ganzen Sicherheitslücken wurden von den Diplominformatikern eingebaut. Die Firma existiert meiner Meinung nur noch, weil es im Enterprise Bereich wohl nicht soviele Hacker gibt..
mfg, René~
-
Bashar schrieb:
Kognitive Dissonanz entsteht, wenn die Realität vom eigenen Weltbild abweicht.
Genau das ist ja hier der Fall. Weltbild = "Man kann das nur mit dieser Theorie", Realität = "Man kann es auch ohne diese Theorie".
Bashar schrieb:
Aber wo ist die mir angeblich unangenehme Realität? Du hast ja bisher nur behauptet, dass du das könntest. Da hab ich kein Problem mit. Leg einen handgestrickten Parser vor, ohne dir vorher was über die Theorie anzueignen.
Reicht dir der multipart/form-data Parser oder ist dir das nicht komplex genug?
mfg, René~
-
Ich hab gesagt für eine Programmiersprache.
Genau das ist ja hier der Fall. Weltbild = "Man kann das nur mit dieser Theorie", Realität = "Man kann es auch ohne diese Theorie".
Beides ist falsch.
-
Bashar schrieb:
Ich hab gesagt für eine Programmiersprache.
Jo, meinste das programmier ich dir jetzt? Du stellst ja die Behauptung auf, dass ich es nicht kann, also musst du das auch beweisen. Ansonsten ist das nur Blah Blah. Oder ich kontere mit: Du kannst keine Game-KI programmieren. Zeige mir einen Code von dir, der das Gegenteil beweist. Du siehst, das ist Kindergartenniveau. Man kann immer irgendwas behaupten.
Bashar schrieb:
Beides ist falsch.
Sondern?
mfg, René~
-
Deine Aussage "Theorie braucht man nicht - ich bin Autodidakt, ich kann auch ohne" stellt dich - und vor allem andere Autodidakten - nicht in einem besonders gutem Licht dar.
Ich bin auch Autodidakt und trotzdem beschäftige ich mich mit der Theorie. Wieso? Weil es mich interessiert und ich denke, dass es mich weiterbringt.
Und jetzt verrate ich dir ein Geheimnis: Es würde dich auch weiterbringen.Du weißt nicht was Grammatiken sind? Mein Tip: Schnapp dir ein gutes Buch darüber und ließ es dir durch. Vielleicht stellst du fest, dass du bei deinem HTML Parser schon "richtig" vorgegangen bist. Wenn dem so ist, umso besser. Wenn nicht, kannst du ja mal schauen, was die Unterschiede sind und ob evtl. doch noch Verbesserungspotential besteht.
Theorie erweitert deinen Horizont, da es viele klüge Köpfe auf dieser Welt gibt, die sich schon Gedanken gemacht haben, auf die man alleine nicht so schnell kommen würde. Warum sollte man sich diesem Wissen verweigern?
-
Tip schrieb:
Theorie braucht man nicht
Das habe ich so nie gesagt, ich rede hier von der "Grammatik" und meiner Praxis.
Tip schrieb:
Theorie erweitert deinen Horizont, da es viele klüge Köpfe auf dieser Welt gibt, die sich schon Gedanken gemacht haben, auf die man alleine nicht so schnell kommen würde. Warum sollte man sich diesem Wissen verweigern?
Das stimmt so einfach nicht. Es gibt Theorien, die muss man überhaupt nicht kennen, dann gibt es Theorien, die die Sache komplizierter statt einfacher machen und es gibt Theorien die sind definitiv lohnenswert.
Und diese Grammatik ist für mich eben eine Verkomplizierung.
mfg, René~
-
NewSoftzzz schrieb:
Bashar schrieb:
Ich hab gesagt für eine Programmiersprache.
Jo, meinste das programmier ich dir jetzt? Du stellst ja die Behauptung auf, dass ich es nicht kann, also musst du das auch beweisen.
Du bist albern. Ich kann auch mit Recht behaupten, dass du allein durch Armwedeln nicht fliegen kannst, ohne das beweisen zu müssen.
Bashar schrieb:
Beides ist falsch.
Sondern?
Einfache Parser kriegt man sicher auch mit viel Gefrickel hin, ohne was von der Theorie zu verstehen. Je komplizierter es wird, desto weniger Land sieht man.
Dass das nicht der Realität entspricht ist deine Behauptung, für die du bisher einen Beweis schuldig geblieben bist.