COCO/Rはコンパイラジェネレーターであり、ソース言語の起因とした文法を採用し、この言語のスキャナーとパーサーを生成します。スキャナーは、決定論的な有限オートマトンとして機能します。パーサーは再帰降下を使用します。 ll(1)競合は、多室のLookaheadまたはセマンティックチェックによって解決できます。したがって、受け入れられた文法のクラスは、任意のkのLL(k)です。
私は長い間、ターボパスカルバージョンのCOCO / Rを使用しています。コードを変更する必要がある場合がありました。ソースが変更された場合、私はそれを再コンパイルしました。しかし、いくつかのWindowsの更新後、Turbo Pascalがより良い場所に行くことがわかりました。一般的に、ニクラウス・エミル・ワースの多くの人々の言語は嫌いだと思います。
一般に、プログラミングとコンピューターサイエンスの言語の開発に匹敵する貢献をした人々はほとんどいないと思います。
問題に対する複雑でしばしば理解できない解決策を見つけるのは簡単です。シンプルで清潔で理解しやすいソリューションを作成することは困難です。
そのような決定を見ると、これが大文字を持つグランドマスターの仕事であることが明らかになります。最初に、Turbo Pascalからコードを移植しました。しかし、私は20年近くで橋の下に多くの水が流れており、COCO/Rコードも順調に改善されていることを発見しました。
私が見つけた最後のバージョンは、C ++、C#、Javaでした。次に、コードを移植してC#を選択することにしました。精神的には、これはおそらく1人のチーフアーキテクトがいるという事実のために、デルファイに最も近い言語です。
Protobuf-Delphiプロジェクトで使用の例を見ることができます。
スキャナーに同じセットのフレームを使用し、異なる言語にパーサーを使用することになっています。コンパイラは、スキャナーとパーサーのかなり固定されたフレーム構造に依存しています。セクションの順序を変更することは望ましくありません。これにより、生成されたコードのコンパイルエラーが発生する可能性があるためです。
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
モジュール名を生成するときに名前空間が使用されます。これは、スキャナー&パーサーフレームで使用されています。
MACROS
prefix = "cr" .