Yacc

Yet another compiler compiler.

Nun, ein Compiler der Compiler baut. Sehr schön. Ein Compiler Construction Set für den DAU? Na ja, vor dem Erfolgt kommt die definierte Grammatik und genau die kann der Yacc verarbeiten.

Die Gramatik wird mittels des BNF- Formats in eine Textdatei geschrieben und dem Yacc als Eingabe angeboten. Ergebnis ist ein Programm im C Quellcode der den Parser für die gewünschte Gramatik enthält.

Artikel um Yacc
Artikel auf Wikipedia zum BNF- Format
Bücher:
Hollub, Allen(1985): Dr. Dobbs Journal 107, Septemper 1985, Kollumne: „C Chest“ zu finden im Buch: C Tools, Markt uns Technik Verlag
http://www.amazon.de/C-Tools-Dr-Dobbs-Journal/dp/3890901905

Slider und Actions..

Wenn ich in einem Formular einen Slider einbaue, dann möchte das Ergebnis, beim verschieben, unmittelbar in einem Textfeld präsentiert bekommen…

Objektive C funktioniert, grob, so: Jedes App das ich schreibe, ist eine Instanz von NSAppliction.

NSApplication verwaltet den Event Loop. Einfacher gesagt: Die Eigene App wird Bestandteil von NSAppliction, nun wird periodisch geprüft, ob ein Ereignis aufgetreten ist, dass meine App betrifft. Wenn Ja, bekommt meine App eine Nachricht welches Ereignis auftrat und kann nun über eine dafür implementierte Methode drauf entsprechend reagieren.

Ganz so kompliziert ist es im Falle eines Sliders nicht, vom Ablauf her aber ähnlich.

Den Slider kann man mit einer eigenen Methode verbinden, die , wird der Slider bedient, unmittelbar gestartet wird.

Bildschirmfoto 2013-12-21 um 17.26.51

 

Das Diagram zeigt wie es geht. Als erstes wird die Methode zeige_thr_m in Controller.m – der Implementoation der Klasse, die hier  „Controler“ heist – geschrieben. Die gepunktete Linie soll zeigen, dass die Methode nun im Conections Inspektor, zunächst ohne Verbindung, angezeigt wird. Letzter muss man nun manuell, mit der Maus mit dem gewünschten Slider Objekt herstellen. Das zeigt die durchgezogene Linie an.

Eine Vereinbarung von  zeige_thr_m im Interface der Klasse braucht es hier nicht.

Die Methode zeige_thr_m wird nun jedesmal, wenn der Slider bedient wird, aufgerufen und ausgeführt.

 

 

 

String Objekte in Strings wandeln..

…Objective C und natives C arbeiten harmonisch, Seite an Seite. 

Da frage ich mich, wie kann man die Schnittstellen gestalten. Nehmen wir an, wir bauen uns ein Cocoa Projekt unter XCode. Dort erzeugen wir uns gewöhnlich ein Controller Objekt. Dieses Objekt repräsentiert z.B. ein Dialog Feld. Die Textfelder sind die Eigenschaften unseres Dialog Objektes. Die Buttons dessen Methoden.

Pures Objective C regelt den Dialog. Die Funktionen welche – je nach Dialog mit dem Nutzer – zur Ausführung gewünscht werden, sind in nativem C geschrieben.

Wie übergebe ich nun z.B. der Funktion „test ()“ einen String der in einem NSTextField Objekt steht?

Antwort: Wir wandeln das den String aus dem NSTextField – der ja eigentlich ein Objekt ist – in einen String, der auch einer ist – kein Objekt!

Das geht z.B. so:

Bildschirmfoto 2013-11-10 um 20.25.11

 

Die Funktion bekommt einen „echten“ String übergeben: grafik15(char meinstring[length]) {….}

That’s it!

Strings

Einem NSTextView Objekt kann ich nur String- Objekte aus: NSAttributedString übergeben. Das geht mit der Methode: appendAttributedString.

Beispiel:
NSAttributedString *next=[[NSAttributedString alloc] initWithString:@“\n“];
[protokoll_speicher appendAttributedString:next];

wobei protokoll_speicher der Inhalt unseres NSTextView ist und über:
protokoll_speicher=[protokoll textStorage];
deffiniert, gebildet… wird?

Was nun, wenn ich einem NSTextView Objekt eigentlich einen StringWithFormat übergeben möchte? Funktionieren tut das:

Bildschirmfoto 2013-10-20 um 20.37.40

 

Warum? Ich muss da wohl noch forschen……

Cocoa lernen, Teil 1

In Stichworten sollte man sich das Folgende behalten:

  • Grundlage für Cocoa ist Objektive C
  • C ist eine Teilmenge von Objektive C
  • Objective C ist die Grundlage für Cocoa und Cocoa stellte den Funktionsumfang für die Grafische Benutzeroberfläche des Mac OS

Klassen werden in Zwei Schritten erzeugt:

  • Das Interface erzeugen (z.B. interface.h)
    Dort werden zwischen den geschweiften Klammern die Instanz- Variablen der Klasse deffiniert. Dann werden die Namen der Methoden und deren Übergabe- und Rückgabewerte definiert.
  • Die Klasse implementieren
    Zwischen @implementation und @end stehen die Methoden der Klasse.
    Die Methode wird mit ihren Ein- und Ausgabewerten definiert:-(Datentyp Rückgabe) MeineMethode: (Datentyp Übergabe) wert
    Nun folgen, zwischen den geschweiften Klammern, die Anweisungen, quasi das Programm der Methode.

Jetzt darf man das Hauptprogramm schreiben. Das beginnt ganz genau so, wie es ein in C geschriebenes Programm auch tut, mit main().

Interface, Implementation und main() dürfen in einer Datei stehen, werden i.d.R. aber – der besseren Übersicht zuliebe – getrennt. X – Code macht das standardmäßig so!

In main() werden die Instanzen der Objekte nun – ähnlich C++ – gebildet:

  • Object *MyObject =[[Object alloc] init];

Die Methoden von MyObject ruft man so auf:

  • [MyObject Methode: Übergabe]