CoCo / R est un générateur de compilateur, qui prend une grammaire attribuée d'une langue source et génère un scanner et un analyseur pour cette langue. Le scanner fonctionne comme un automate fini déterministe. L'analyseur utilise une descente récursive. LL (1) Les conflits peuvent être résolus par un look multi-symbole ou par des chèques sémantiques. Ainsi, la classe de grammaires acceptées est ll (k) pour un k arbitraire.
J'utilise la version Turbo Pascal de Coco / R depuis longtemps. Parfois, il était nécessaire de modifier le code. Si les sources ont changé, je l'ai recompilée. Mais après une mise à jour de Windows, j'ai trouvé que Turbo Pascal se rend dans un meilleur endroit et a cessé de courir. En général, je pense que les langues de nombreuses personnes de Niklaus Emil Wirth ne sont pas aimées.
En général, je crois qu'il y a peu de personnes qui ont apporté une contribution comparable au développement de langages de programmation et d'informatique.
Il est facile de trouver une solution complexe et souvent incompréhensible à un problème. Il est difficile de faire une solution simple, propre et compréhensible.
Lorsque vous voyez une telle décision, il devient clair qu'il s'agit du travail du Grand Maître avec une majuscule. Tout d'abord, j'ai porté le code de Turbo Pascal. Mais j'ai découvert qu'en près de 20 ans, beaucoup d'eau a coulé sous le pont et que le code Coco / R a également été bien amélioré.
La dernière version que j'ai trouvée était C ++, C #, Java. Ensuite, j'ai décidé de porter le code et j'ai choisi C #. Dans l'esprit, c'est la langue la plus proche de Delphi, probablement en raison du fait qu'ils ont un architecte en chef.
Vous pouvez voir un exemple d'utilisation dans le projet Protobuf-Delphi.
Il est censé utiliser le même ensemble de cadres pour le scanner et l'analyseur pour différentes langues. Le compilateur s'appuie sur une structure de trame assez fixe pour le scanner et l'analyseur. Il n'est pas souhaitable de modifier l'ordre des sections, car cela peut entraîner des erreurs de compilation dans le code généré.
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
L'espace de noms est utilisé lors de la génération d'un nom de module. Ceci est maintenant utilisé dans les cadres Scanner & Parser.
MACROS
prefix = "cr" .