Coco/R ist ein Compiler -Generator, der eine zugeschriebene Grammatik einer Quellsprache einnimmt und einen Scanner und einen Parser für diese Sprache generiert. Der Scanner arbeitet als deterministischer endlicher Automat. Der Parser verwendet rekursive Abstammung. LL (1) Konflikte können durch einen Multisymbol-Lookahead oder durch semantische Schecks gelöst werden. Somit ist die Klasse der anerkannten Grammatiken LL (k) für ein willkürliches k.
Ich benutze die Turbo -Pascal -Version von Coco / R schon lange. Manchmal musste der Code geändert werden. Wenn sich die Quellen geändert haben, kompilierte ich sie neu. Aber nach einigen Windows -Update stellte ich fest, dass Turbo Pascal an einen besseren Ort gelangt und aufgehört zu laufen. Im Allgemeinen denke ich, dass die Sprachen vieler Menschen aus Niklaus Emil Wirth Abneigung verursachen.
Im Allgemeinen glaube ich, dass es nur wenige solche Menschen gibt, die einen vergleichbaren Beitrag zur Entwicklung von Programmier- und Informatiksprachen geleistet haben.
Es ist leicht, eine komplexe und oft unverständliche Lösung für ein Problem zu finden. Es ist schwierig, eine einfache, saubere und verständliche Lösung zu erstellen.
Wenn Sie eine solche Entscheidung sehen, wird klar, dass dies die Arbeit des Großmeisters mit einem Großbuchstaben ist. Zuerst habe ich den Code von Turbo Pascal portiert. Aber ich entdeckte, dass in fast 20 Jahren viel Wasser unter der Brücke geflossen ist und der Coco/R -Code ebenfalls gut verbessert wurde.
Die letzte Version, die ich gefunden habe, war C ++, C #, Java. Dann habe ich mich entschlossen, den Code zu portieren und C #zu wählen. Im Geiste ist dies die Sprache, die Delphi am nächsten ist, wahrscheinlich aufgrund der Tatsache, dass sie einen Hauptarchitekt haben.
Sie können ein Beispiel für die Verwendung im Protobuf-Delphi-Projekt sehen.
Es soll dieselbe Sätze von Frames für Scanner und Parser für verschiedene Sprachen verwenden. Der Compiler stützt sich auf eine ziemlich feste Rahmenstruktur für Scanner und Parser. Es ist nicht wünschenswert, die Reihenfolge der Abschnitte zu ändern, da dies zu Kompilierungsfehlern im generierten Code führen kann.
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
Der Namespace wird verwendet, um einen Modulnamen zu generieren. Dies wird jetzt in den Scanner- und Parserrahmen verwendet.
MACROS
prefix = "cr" .