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

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