Forum: PC-Programmierung Informatik-Frage - wie nennt man den Weg zur Methode?


von Cppbert3 (Gast)


Lesenswert?

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?

von DPA (Gast)


Lesenswert?

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.

von Cppbert3 (Gast)


Lesenswert?

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

von Das wird aufwendig (Gast)


Lesenswert?

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.

von Informatiker (Gast)


Lesenswert?

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.

von Das wird aufwendig (Gast)


Lesenswert?

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?

von Informatiker (Gast)


Lesenswert?

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.

von Das wird aufwendig (Gast)


Lesenswert?

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.
von Das wird aufwendig (Gast)


Lesenswert?

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?

von Ntldr -. (ntldr)


Lesenswert?

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
von Mark B. (markbrandis)


Lesenswert?

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
von Yalu X. (yalu) (Moderator)


Lesenswert?

Ich würde dem TE die Antwort von Ntldr empfehlen (beide Abschnitte).

von c-hater (Gast)


Lesenswert?

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

von cppbert3 (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

cppbert3 schrieb:

> Dann nenne ich es in meinem Interpreter wohl doch Expression

Damit kannst du zumindest nix falsch machen. ;o)

von Yalu X. (yalu) (Moderator)


Lesenswert?

cppbert3 schrieb:
> Dann nenne ich es in meinem Interpreter wohl doch Expression

Ohne das abschließende Semikolon wäre das richtig.

von Mark B. (markbrandis)


Lesenswert?

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?

von Yalu X. (yalu) (Moderator)


Lesenswert?

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ₒₚₜ ;

von Mark B. (markbrandis)


Lesenswert?

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. ;-)

von cppbert3 (Gast)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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
Noch kein Account? Hier anmelden.