Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Transpilation dans GNU COBOL

Transpilation dans GNU COBOL

Présentation effectuée au meetup #41 Programmez par Christophe Villeneuve et Samuel Belondrade sur "La transpilation dans GnuCobol".
Cette session vous aidera à comprendre comment se comporte la transpilation et le moyen de l'implémenter dans GnuCobol

Avatar for hellosct1

hellosct1

April 29, 2024
Tweet

More Decks by hellosct1

Other Decks in Technology

Transcript

  1. Meetup #41 - 2024 Compilation VS Transpilation • Objectif –

    prendre en entrée un code source • écrit dans un langage • compréhensible par un humain – pour le transformer • en instructions logiques exécutables par une machine. • Le terme “transpilation” – Dérivé du terme anglais “translate” – qui signifie “traduire” • Traduire un code d’un langage vers un autre – sans forcément changer de niveau d’abstraction Compilation Transpilation
  2. Meetup #41 - 2024 ex. compilation • Analyse lexicale –

    détection des erreurs de grammaire • Pré-traitement – suppression des commentaire • Analyse syntaxique – construction d’un arbre syntaxique et détection des erreurs de syntaxe • Analyse sémantique – détection des erreurs de logique • Optimisation du code • Création de l’exécutable – Linking
  3. Meetup #41 - 2024 ex. transpilation • Un exemple de

    transpilation de TypeScript vers JavaScript • Le code n’a pas été optimisé : – Le commentaire est toujours là – Les noms des variables/fonctions n’ont pas été raccourcis – Le code n’a pas été optimisé • le ternaire d’origine est redondant avec la syntaxe “obj?” • La transpilation prend un code source en entrée et ressort un code source
  4. Meetup #41 - 2024 GnuCobol !!! • C’est transcompilateur en

    C – qui utilise un compilateur C natif • Objectif : – la possibilité de comprendre et de compiler différentes sources (ou normes) • Sous la forme d'un traducteur qui prend en entrée le code source d'un programme écrit dans une version de Cobol. – Il produit un code source équivalent • dans le même langage de programmation • ou dans un langage différent
  5. Meetup #41 - 2024 Evolution de Cobol • Bénéficie de

    plusieurs révisions standardisées – ANSI – ISO → tagué : • Cobol-68 • Cobol-74 • Cobol-85 • Cobol 2002 • ...
  6. Meetup #41 - 2024 Normes techniques compatibles à GnuCobol •

    Avant 3.2 – ACUCOBOL-GT – BS2000 – COBOL85, COBOL2002, COBOL2014 – IBM – MVS – MicroFocus – RM/COBOL – … • Depuis 3.2 (dispo 2023) • Support des standard – Cobol 2022 – Cobol 2023 • Support dialecte GCOS 7 • Nouvelles fonctions – BIT-OF, BIT-TO-CHAR, HEX-OF, HEX-TO- CHAR https://sourceforge.net/projects /gnucobol/files/gnucobol/3.2/
  7. Meetup #41 - 2024 Installation à partir de Debian •

    A partir du site officiel GNU Cobol 3.2 https://sourceforge.net/projects/gnucobol/files/gnucobol/3.2/ • Dépendances – build-essential – automake – libgmp-dev – libdb-dev (optionnel) • Compilation autoconf ./configure # ou ./configure --without-db si libdb-dev n'a pas été installé make sudo make install sudo ldconfig
  8. Meetup #41 - 2024 Exemple 1 : Hello World !

    • Script : hello-world.cob • Compiler • Executer IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. ENVIRONMENT DIVISION. PROCEDURE DIVISION. *> affiche "Hello World !" sur l'entrée standard DISPLAY "Hello World !". STOP RUN. $ cobc -x hello-world.cob $ ./hello-world Résultat : Hello World !
  9. Meetup #41 - 2024 Exemple 2 : Replacing (1/2) •

    Script main.cob • Fichier test.cpy move "Salut Programmez!" to VARIABLE. identification division. program-id. maincob. environment division. data division. working-storage section. 01 test-variable-string pic X(17). procedure division. copy "test.cpy" replacing ==VARIABLE== by ==test-variable-string==. display test-variable-string. stop run.
  10. Meetup #41 - 2024 Exemple 2 : Replacing (2/2) •

    Compiler $ cobc -free -x main.cob • Executer $ ./main Résultat : Salut Programmez !
  11. Meetup #41 - 2024 Exemple 3 : utiliser c et

    cobol (1/3) • Script main.cob identification division. program-id. bonjour. environment division. data division. linkage section. 01 arg1 pic X(6). 01 arg2 pic X(11). procedure division using arg1 arg2. display arg1 arg2. goback. end program bonjour.
  12. Meetup #41 - 2024 Exemple 3 : utiliser c et

    cobol (2/3) • Script main.c #include <libcob.h> extern int bonjour(char *arg1, char *arg2); int main(void) { int ret; char arg1[6] = "Salut "; char arg2[11] = "Programmez!"; cob_init(0, NULL); ret = bonjour(arg1, arg2); (void)cob_tidy(); return ret; }
  13. Meetup #41 - 2024 Exemple 3 : utiliser c et

    cobol (2/3) • Compiler $ cobc -free -x main.c main.cob • Executer $ ./main Résultat : Salut Programmez !
  14. Meetup #41 - 2024 Exemple 4 : Réalisation graphique •

    Script • Executer $ ./hello-world
  15. Meetup #41 - 2024 Article • Programmez 262 • GnuCobol

    : Cobol open source • Actuellement en kiosque https://www.programmez.com/magazine/programmez-262-pdf