wenn ich ueber einen Objekt-Kette eine Methode Aufrufe - wie nennt man dann die ganze Zeile (aus Kompiler, AST-Sicht?)? z.B. a.b.c(32).d.Test(); Ist das eine Expression, einen Anweisung, eine Dereferenzierung(teilweise)? Wie nennt man das ganze zusammen?
AST = Abstract syntax tree Also ein Baum aus Nodes mit Child Nodes die den Code in seine Bestandteile Aufspaltet, so abstrakt repräsentiert & klassifiziert zur Weiterverarbeitung. Nimmt man dann eine Node plus all deren child nodes usw., dann würde ich das als ein Subtree des AST bezeichnen. Aber du willst vermutlich wissen, wie die übergeordnete Node für diesen Ausdruck heisst? Wie das genannt wurde, muss man halt im AST selbst nachsehen. Falls das überhaupt nur eine übergeordnete für nur den teil hat, und diese überhaupt einen Namen hat, usw. Gesammte Ausdrücke werden aber häufig als "statement", "expression" oder ähnliches bezeichnet, manchmal besteht ein Statement aus einer oder mehreren Expressions, und manchmal nennt man die auch anders oder man baut es sogar anders auf.
DPA schrieb: > Falls das > überhaupt nur eine übergeordnete für nur den teil hat, und diese > überhaupt einen Namen hat, usw. Gesammte Ausdrücke werden aber häufig > als "statement", "expression" oder ähnliches bezeichnet, manchmal > besteht ein Statement aus einer oder mehreren Expressions, und manchmal > nennt man die auch anders oder man baut es sogar anders auf. Ja genau, es ist ein wenig unklar: Statement finde ich aber auch schon mal nicht schlecht
Für jede Sprache gibt es eine offizielle Grammatik. Die C++ musst du bei der ISO kaufen, aber du findest auch freie Versionen, wie z.B hier http://eel.is/c++draft/gram Wenn du den Namen deines Ausdrucks haben willst, musst du halt wie ein Compiler die Zeile zerlegen, die entsprechenden Blätter im Baum suchen und anhand der Regeln den gemeinsamen internen Knoten finden.
Cppbert3 schrieb: > wenn ich ueber einen Objekt-Kette eine Methode Aufrufe - wie nennt man > dann die ganze Zeile (aus Kompiler, AST-Sicht?)? Man nennt die Zeile "Zeile" oder auf englisch "line". Du hast so wenig Ahnung von Informatik, dass du nicht mal eine brauchbare Frage stellen kannst. Also lass es.
Hmmm... In Sprachen wie Python, Basic oder Fortran muss jede Anweisung in einer Zeile stehen. Da währe es ja durchaus sinnvoll wenn wir Cppberts Zeile auch "Zeile" nennen. In C++ ist aber auch eine andere Form üblich.
1 | a.b |
2 | .c(32) |
3 | .d |
4 | .Test(); |
Würdest du es so formatiert auch "Zeile" nennen?
Das wird aufwendig schrieb: > a.b > .c(32) > .d > .Test();Würdest du es so formatiert auch "Zeile" nennen? Nein, aber a.b würden ich und der Compiler Zeile nennen. .c(32) auch. usw. Ist das so schwer? Na, was habe ich über brauchbare Fragen geschrieben? Gilt auch für dich. Und nun troll dich.
Oder anderes Beispiel. Mit einer anderen Klasse funktioniert diese Verkettung nicht. Du schreibst
1 | a.b.c(32); a.d.Test(); |
In Python sagst du: Die andere Klasse benötigt 2 "Zeilen". Aber wie sagst du es bei C++? Ist das eine Zeile, oder sind das 2 Zeilen?
Beitrag #5846281 wurde von einem Moderator gelöscht.
Wie kann ich ausdrücken: Cppberts Klasse braucht nur eines von diesen Dingern. Die andere Klasse braucht zwei von diesen Dingern. In Python ergibt jedes dieser Dinge eine Zeile. Somit kann ich sagen: Bei der ersten Klasse braucht man nur eine Zeile, bei der anderen Klasse braucht man zwei Zeilen. Aber wie heisst dieses Ding in C++? Kann ich sagen: Die zweite Klasse, braucht zwei Statements? Zwei Expressions? Zwei Verkettungen? Zwei Verkettungs-Ausdrücke? Wie nennt ein Informatiker dieses Ding?
1 | a.b.c(32).d.Test(); |
Wenn man im Standard nachschaut ist das ganze Formal ein (Expression-)Statement. Ohne Semikolon ist es eine Expression. Siehe [stmt.expr]. Die Expression kann man dann noch wieder weiter aufschlüsseln in die Unterkomponenten. Von Zeilen im AST zu sprechen ist Quatsch. Im AST werden die Zeilen ja auch gar nicht verzeichnet.
:
Bearbeitet durch User
Cppbert3 schrieb: > wenn ich ueber einen Objekt-Kette eine Methode Aufrufe - wie nennt man > dann die ganze Zeile (aus Kompiler, AST-Sicht?)? > > z.B. > > a.b.c(32).d.Test(); Es wird eine Methode aufgerufen. Also ist es ein Methodenaufruf (method call). Warum willst Du einen anderen Namen dafür?
:
Bearbeitet durch User
Ich würde dem TE die Antwort von Ntldr empfehlen (beide Abschnitte).
Cppbert3 schrieb: > wenn ich ueber einen Objekt-Kette eine Methode Aufrufe - wie nennt man > dann die ganze Zeile (aus Kompiler, AST-Sicht?)? > > z.B. > > a.b.c(32).d.Test(); > > Ist das eine Expression, einen Anweisung, eine > Dereferenzierung(teilweise)? > Wie nennt man das ganze zusammen? Kein Ahnung. Der eigentliche Punkt aber ist: das interessiert (jenseits des akademischen Bereiches) auch absolut niemanden. Und es ist obendrein sehr fraglich, ob es im akademischen Bereich irgend jemanden ernsthaft interessiert... Vorschlag: konzentriere dich auf wichtigere Sachen...
Ntldr -. schrieb: > a.b.c(32).d.Test(); > Wenn man im Standard nachschaut ist das ganze Formal ein > (Expression-)Statement. Ohne Semikolon ist es eine Expression. Siehe > [stmt.expr]. Die Expression kann man dann noch wieder weiter > aufschlüsseln in die Unterkomponenten. > > Von Zeilen im AST zu sprechen ist Quatsch. Im AST werden die Zeilen ja > auch gar nicht verzeichnet. Dann nenne ich es in meinem Interpreter wohl doch Expression Danke an alle
cppbert3 schrieb: > Dann nenne ich es in meinem Interpreter wohl doch Expression Damit kannst du zumindest nix falsch machen. ;o)
cppbert3 schrieb: > Dann nenne ich es in meinem Interpreter wohl doch Expression Ohne das abschließende Semikolon wäre das richtig.
Yalu X. schrieb: > cppbert3 schrieb: >> Dann nenne ich es in meinem Interpreter wohl doch Expression > > Ohne das abschließende Semikolon wäre das richtig. Und mit dem abschließenden Semikolon?
Mark B. schrieb: > Yalu X. schrieb: >> cppbert3 schrieb: >>> Dann nenne ich es in meinem Interpreter wohl doch Expression >> >> Ohne das abschließende Semikolon wäre das richtig. > > Und mit dem abschließenden Semikolon? Das hat doch Ntldr oben schon geschrieben: Ntldr -. schrieb: > Wenn man im Standard nachschaut ist das ganze Formal ein > (Expression-)Statement. Ohne Semikolon ist es eine Expression. Die enstprechende Stelle im ISO-Dokument sieht so aus:
1 | expression-statement: |
2 | expressionₒₚₜ ; |
Yalu X. schrieb: > Die enstprechende Stelle im ISO-Dokument sieht so aus: > > >
1 | > expression-statement: |
2 | > expressionₒₚₜ ; |
3 | > |
Danke. Nur was genau jetzt der Erkenntnisgewinn in diesem Thread ist, erschließt sich mir nicht so recht. ;-)
Mark B. schrieb: > Yalu X. schrieb: >> Die enstprechende Stelle im ISO-Dokument sieht so aus: >> >> >>> expression-statement: >> expressionₒₚₜ ; >> > Danke. Nur was genau jetzt der Erkenntnisgewinn in diesem Thread ist, > erschließt sich mir nicht so recht. ;-) Ich brauchte einen Namen für einen Interpreter Klasse
cppbert3 schrieb: > Ich brauchte einen Namen für einen Interpreter Klasse Das ist einfach:
1 | class Interpreter; |
;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.