Brevet FR2533721A1 — publié le 19840330

La présente invention se rapporte aux systèmes d'ordina- teur et plus particulièrement à-une nouvelle architecture d'ordinateur qui assure la compilation en temps réel d'un programme d'origine évolué en même temps que le programme est entré ou révisé au pupitre par le programmeur. Etant donné que les hommes écrivent les programmes en un langage de programmation et que les ordinateurs n'exé- cutent que le langage machine, il est fréquemment nécessaire d'effectuer la traduction d'un langage dans l'autre Lorsque le langage de programmation est "évolué", c'est-à-dire abstrait dans le sens qu'il ne manipule pas explicitement les registres et autres matériels de l'ordinateur, la traduc- tion du programme original est exécuté par un autre programme appelé un "compilateur" Le programma original est appelé un "code d'origine" et la traduction du-programme résultante est appelée le "code résultant". En plus de la traduction, le compilateur doit également effectuer des analyses lexicales, syntactiques et sémantiques du code d'origine L'analyse lexicale est effectuée par un "explorateur" et c'est le processus de formation d'une sé- quence de multiplets de code d'origine en symboles ou signes, quelque peu à la manière de la formation d'une séquence de. caractères en mots anglais Ces symboles sont ensuite soumis à l'analyse syntactique par un analyseur syntactique appelé un "perser" qui détermine si ils sont agencés dans une rela- tion qui est conforme aux règles grammaticales rigides du langage de programmation L'analyse sémantique détermine si les symboles sont conformes à des règles supplémentaires qui ne peuvent pas être commodément exprimées par la grammaire du langage. Ces analyses sont très semblables à une analyse syntac- tique des mots d'une phrase anglaise Si la séquence de sym- boles viole une règle syntactique ou sémantique, on dit qu'une "erreur" a été commise et le compilateur doit en in- former le programmeur en émettant un "message d'erreur" vi- sible. Après traduction, le code résultant est habituellement "enchaîné" et "chargé", processsus au cours duquel il est joint à d'autres modules en code résultant pour former un programme en code machine com Dlet qui peut être exécuté car la machine. Au cours de ces dernières années, le fort accroissement des coûts du logiciel, le manque de programmeurs spécialisés, l'expansion rapide du marché des ordinateurs, l'adoption géné- ralisée des micro-ordinateurs et la sous-utilisation d'une grande partie du matériel disponible par suite d'un manque de logiciel ont contraint à l'adoption de langages évoluéset à l'entreprise d'efforts concertés pour rendre leur emploi plus efficace. Cependant, la programmation dans un langage évolué est encore un processsus lent, fastidieux et inefficace Par exemple, même dans les conditions optimales d'un pupitre interactif, un langage compilé nécessite l'exécution d'une séquence d'étapes répétées qui comprennent le chargement de l'éditeur, l'écriture ou la révision du code d'origine, le chargement du compilateur, l'exécution du compilateur, le chargement de l'éditeur de liens, l'exécution de l'éditeur de liens, le passage en machine du programme et la répétition de la séquence lorsqu'une erreur est indiquée pendant la com- pilation du code d'origine ou l'exécui:ion du code résultant. Pendant une grande partie du temps, le programmeur est obli- gé d'attendre l'achèvement des étapes de chargement ou d'exé- cution et ce temps d'attente constitue un gaspillage tout en étant fastidieux Il en résulte que le processus de program- mation est lent et onéreux Il est généralement admis que la production du programmeur professionnel moyen n'est que de cinq à dix lignes de code d'origine mis au point par jour (Doc n' 4) Les mentions entre-parenthèses se réfèrent à la bibliographie donnée à la fin de cette description. L'utilisation généralisée récente des micro-ordinateurs domestiques a fortement accru la difficulté du problème de programmation La plupart des utilisateurs qui écrivent actu- ellement des programmes pour de tels ordinateurs n'ont pas reçu un enseignement professionnel de programmeur et sont peu disposés à perdre le temps, à effectuer les efforts et endurer l'ennui et la frustration inhérents à la mécaniqaue de la programmatior dans un langage compilé avec les svstèmes de micro-ordinateur actuels (Doc N O 9). Au lieu de cela, la maj 6 rité des programmeurs d'ordina- teurs domestiques utilisent des interprètes de BASIC Ces derniers sont généralement syntactiquement pauvres, ineffi- caces pour révéler les erreurs, incapables d'utiliser des variables locales, incapables de transmettre des paramètres aux sous-routines, incapables d'appeler des sous-routines par leur nom, incapables de lier des modules de bibliothèque, et ils manquent à la fois de structures de données et de struc- tures de commande de flux de données de sorte qu'ils rendent extrêmement difficile d'écrire un programme exempt d'erreur pour des applications quelconques à l'exception des plus simples Le BASIC est, par conséquent, considéré comme étant un très mauvais moyen pour enseigner une bonne technique de programmation (Doc n 1) Ces interprètes de BASIC sont éga- lement si lents d'exécution qu'ils sont également désavanta- geux, voire inutilisables pour de nombreuses applications. Néanmoins, la mécanique de la compilation avec les sys- tèmes de micro-ordinateurs actuels est si malcommode que les interprètes de BASIC prédominent dans le domaine des micro-ordinateurs et dégradent considérablement le processus de programmation. De nombreuses tentatives ont été effectuées en vue de réduire les inconvénients de l'utilisation classique des com- pilateurs Une telle méthode est le compilateur dit-"incré- mentiel" (Doc n 5, 6, 7, 10, 11)o Lorsque chaque ligne de code d'origine est entrée au pupitre, elle est analysée afin de déterminer si elle est conforme aux règles de syntaxe d'une grammairelocale restreinte,dans laquelle la ligne est traitée isolément sans tenir compte du contexte de l'ensemble du programme Si la ligne est exempte d'erreur sous cet angle limité, le programmeur est libre d'entrer la ligne suivante. Sinon, un message d'erreur est affiché et l'erreur doit être corrigée avant que de nouvelles lignes soient entrées Après que l'ensemble du programmne a été entré, le programme est soumis à de nouvelles analyses syntactiques et sémantiques en ce qui concerne les règles fonction du contexte après quoi la génération du code résultant et l'exécution peuvent être effectuées. Le compilateur incrementiel présente certains avantages lorsqu'il est utilisé avec les langages qui comportent peu de limitations fonction du contexte, tels que le BASIC Pour les langages structurés modernes, tels que l'Algol, le Pascal le PL/1, le C et l'Ada, l'analyse locale lir tée qui peut être effectuée après l'entrée de chaque ligne n'est qu'une partie relativement petite de l'analyse totale requise et ne justifie pas le temps système correspondant. Une autre méthode bien connue de la technique antérieure a été appelée " recompilation répétée" (Doc n 2) Dans cette solution, les analyses syntactiques et sémantiques effectuées après l'entrée de chaque ligne comprennent toutes les règles fonction du contexte et prennent'en considération la totalité du programme partiel entré jusqu'à ce point Par conséquent, lors de la révision même d'un unique multiplet du code d'ori- gine entré, la totalité du programme d'origine doit être re- compilée à partir du début Etant donné que cette recompi-. lation doit être achevée avant que de nouvelles lignes puissent être entrées,le temps-système important de cette mé- rhode empêche son emploi sauf pour les programmes les plus courts. Dans un effort effectué en vue d'éviter le temps-sys- tème de la recompilation complète un certain nombre de mé- thodes de recompilation partielle ont été imaginées (Doc. 3 n 1, 3, 8) Ces méthodes ont généralement nécessité l'em- ploi d'une structure de données complexe pour le code d'o- rigine et/ou d'un éditeur complexe qui sont tels qu'un pro- grammeur ayant suffisamment de compétences dans la méthode particulière peut effectuer un changement dans le code d'o- rigine de manière qu'il soit seulement nécessaire d'effec- tuer une recompilation de la partie modifiée du code d'ori- gine Ces solutions nécessitent l'emploi d'une quantité exces- sive de mémoire d'ordinateur et/ou des compétences hautement spécialisées du programmeur. Ces méthodes de la technique antérieure, n'ont eu aucune application pratique sauf en tant que curiosités experimen- tales en recherche pure Les compilateurs disponibles dans le commerce nécessitent encore les séquences répétées des étapes de chargement, édition, chargement, compilation, chargement, liaison et passage machine, comme décrit ci-dessus. L'architecture idéale pour la fonction de programmation devrait présenter les caractéristiques ci-après: la compilation devrait être effectuée en temps réel lorsque le code d'origine est entré ou révisé par le program- meur; le système devrait être capable d'utiliser un langage moderne structuré en blocs ayant une syntaxe puissante, tel que l'Algol, le C, le Pascal ou le PL/1; il ne devrait pas y avoir d'attente pour les accès aux disques pendant l'écriture, l révision ou la compilation du programme sauf dans la mesure nécessaire pour l'entrée initiale ou la sauvegarde des fichiers de code d'origine; un message d'erreur devrait être affiché pratiquement instantanément après qu'une erreur de syntaxe a été entrée au pupitre; la correction des erreurs de code d'origine devrait être rapide et facile sans rechargement de l'éditeur du fi- chier de code d'origine ni du compilateur; la compilation devrait être finie presqu'instantanément après l'entrée de la dernière ligne d'un programme d'origine sans erreur; la compilation devrait être complète en ce sens qu'au- cune autre analyse syntactique ou sémanr -:ique ne devrait être nécessaire et que l'absence d'un message d'erreur devrait garantir que le programme ne contient pas d'erreur syntac- tique ni sémantique; le programmeur devrait être capable d'arrêter à tout mo- ment l'exécution du code résultant, d'examiner les valeurs de toutes les variables et de poursuivre l'exécution, tout cela sans nécessiter l'insertion préalable d'instructicns d'écriture, de points de rupture ou autre code de miseau point dans le programme d'origine; et l'architecture ne devrait pas imposer des conditions supplémentaires quelconques relatives à l'em loi d'une syn- taxe de langage propre particulière, d'une mécanique d'édi- teur complexe ni exiger une spécialisation particulière du programmeur dans la méthode. L'exposé ci-après est une description résumée d'un mode de réalisation préféré de l'invention. Le programmeur appelle le système comrplateur-éditeur en temps réel en tapant son nom de fichier de commande sur le clavier du pupitre Le fichier de commande contenant la partie de logiciel du système est alors chargé dans la mé- moire à partir d'un disque La mémoire-tampon de code d'o- rigine, une région de la mémoire qui doit contenir le code d'origine,est initialisée de sorte que le premier multiplet qu'elle met en mémoire est un code prédéterminé qui sera appelé une "Marque de Pause" L'exécution du compilateur com- mence alors par la lecture de la "Marque de Pause" en tant que caractère qui se trouve dans le premier emplacement de la mémoire-tampon Lorsque le compilateur lit la "Marque de Pause",il entre de manière répétée dans une boucle infinie lisant le même emplacement jusqu'à ce que le contenu de cet emplacement soit changé par l'éditeur en un blanc (espace- ment). Lorsque le programmeur frappe une touche sur le clavier du pupitre, le processeur central exécute la séquence d'in- terruption suivante, décritepourun micro-processeur 8080 ou Z 80 Après achèvement de l'instruction en cours d'exécu- tion, le processeur entre dans le mode d'interruption et communique son nouvel état au système en émettant un signal d'accusé-réception d'interruption. A réception de ce signal,le matériel d'interruption transmet une instruction RST sur le bus de données Le pro- cesseur exécute alors l'instruction RST qui est un appel d'un multiplet à un emplacementchoisi dans la partie basse de la mémoire o est mise en mémoire une instruction de saut ("vecteur") à la routine de service des interruptions qui comprend l 'éditeur. La routine de service des'interruptions sauvegarde tout d'abord le pointeur de pile et les autres registres de l'uni- té de traitement Si la touche frappée correspond à un carac- tère alphanumérique ou autre caractère qui n'est pas un carac- tère de commande, ce caractère est placé dans le second empla- cement de la mémoire-tampon de code d'origine immédiatement après la Marque de Pause Le pointeur de la mémoire-tampon est alors avancé à l'emplacement suivant, les registresde l'unité sont restaurés, l'unité de traitement est mise l'é- tat interruptible et' l'instruction RET (retour) est exécutée pour retourner la commande au compilateur. Le compilateur continue à exécuter sa boucle infinie dans laquelle il lit de manière répétée le caractère de Marque de Pause contenu dans le premier empladement de la mémoire-tampon de code d'origine Cette séquence est répétée lorsque le programmeur frappe de nouvelles touches sur le clavier,les caractères successifs étant entrés dans des em- placements successifs de la mémoire-tampon de code d'origine à mesure que le pointeur de la mémoire-tampon avance Cette séquence se poursuit jusqu'à ce qu'une touche correspondant à un caractère de commande soit frappée. Si ce caractère de commande est un retour du chariot, le code correspondant ( 13) est introduit dans la mémoire- tampon, le pointeur de la mémoire-tampon est avancé, le code de Marque de Pause est alors introduit dans l'emplacement de la mémoire-tampon adjacent au code de retour du chariot et le code de Marque de Pause initial contenu dans le premier emplacement est remplacé par le code ( 32) représentant un espace blanc L'emplacement de la farque de Pause a ainsi été déplacé de son point initial et mis à la fin de la pre- mière ligne de code d'origine. Après retour au compilateur à partirade la routine de service des interruptions,le pointeur du compilateur accède au premier emplacement de la mémoire-tampon et lit le code représentant un espacement au lieu de la Maraue de Pause Le compilateur fait alors avancer son pointeur de manière répéti- tive à l'emplacement de mémoire suivante et effectue ses ana- lyses lexicales, syntactiques et sémantiques sur la premiere ligne de code d'origine contenue dans la mémoire-tampon Le compilateur peut soit afficher un message d'erreur soit émettre un code résuitant compilé, selon le cas, jusqu'à ce que le pointeur du compilateur atteigne la nouvelle Marque de Pause introduite à la fin de la première ligne du code d'origine. Lorsqu'il atteint la nouvelle Marque de Pause, le compi- lateur entre à nouveau dans une boucle infinie sans faire avancer son pointeur jusqu'à ce que l'éditeur déplace la Marque de Pause jusqu'à la fin de la ligne suivante à la suite de quoi le compilateur est libre de compiler cette ligne suivante de code d'origine. Il est possible d'entrer des caractères de commande autres qu'un retour du chariot en frappant les touches ap- propriées pour effectuer les fonctions d'édition classiques d'un éditeur d'écran Par exemple, on peut corriger les erreurs dans la ligne en cours de code d'origine en dépla- çant le curseur en arrière Ceci n'a pas d'effet sur le com- pilateur qui ne peut pas avancer au-delà de la Marque de Pause située à la fin de la ligne précédente. Cependant, si, en frappant la touche de commande appro- priée on provoque le déplacement du curseur vers le haut d'une ou de plusieurs lignes jusqu'à un emplacement situé avant la Marque de Pause, ceci met en fonction un Indicateur de Recompilation de façon à entrer un mode de recompilation. Dans ce cas, à la suite du retour de la commande au compila- teur, ce dernier est ré-initialisé de façon qu'il puisse re- compiler le code d'origine à partir du tout début de la mé- moire-tampon d'origine Les révisions ou insertions de texte d'origine suivantes ont pour effet que l'éditeur dé- place la Marque de Pause jusqu'à un emplacement de mise à jour adjacent à l'extrémité de la ligne qui précède la ligne la plus récemment révisée. -33721 Lorsque le compilateur trouve une erreur de syntaxe dans le code d'origine, il affiche un message d'erreur Le pro- grammeur peut alors réviser le programme d 'origine pour corri- ger l'erreur Après retour de l'éditeur, le compilateur est ré-initialisé pour recompiler le code d'origine. Le code d'origine entré et le code résultant émis sont, de préférence, mis en mémoire dans la mémoire centrale de sorte que des accès à des disques n'entravent pas d'une ma- nière excessive les processus d'édition et de compilation. Si la mémoire-tampon de code d'origine ou de code résultant est pleine, son contenu peut être mis en mémoire dans un fi- chier sur disque de la manière classique utilisée dans les éditeurs et les processeurs de mots tels que le CP/M ED etle Wordstar L'emploi de systèmes de mémoire à sélection de bancs ou la venue sur le marché des microprocesseurs à 16 bits avec leurs plus grands espaces de mémoire évitera la nécessité d'un stockage sur disque jusqu'à ce que la compi- lation soit finie D'autres caractéristiques de l'invention apparaitront à la lecture de la description qui va suivre et à l'examen des dessins annexés dans lequels: la Fig 1 est un schéma synoptique qui représente les. relations er-re les éléments principaux du matériel qui cons- titue un mode de réalisation préféré du système d'ordinateur selon la présente invention; la Fig 2 est un schéma qui représente la logique et les circuits d'interruption du matériel du système; la Fig 3 est un organigramme représentant la séquence générale des opérations; la Fig 4 est un organigramme représentant la séquence des opérations du compilateur; la Fig 5 est un organigramme représentant la séquence des opérations de l'éditeur; et la Fig 6 est un organigramme représentant la séquence des opérations des routines de caractère de commande de l'é- diteur. On donnera ci-après une description détaillée d'un mode de réalisation préféré de l'invention Les détails décrits sont simplement illustratifs de l'une des nombreuses formes sous lesquelles l'invention peut être mise en oeuvre L'in- vention et la nouveauté ne résident ni dans le matériel ni dans le logiciel considérés séparément mais plutôt dans une combinaison des deux. Sur la Fig 1 à laauelle on se référera tout d'abord, on a représenté les principaux éléments matériels aui consti- tuent l'ensemble du système d'un mode de réalisation préféré de la présente invention Chaque élément sera désigné par l'inscription écrite dans le rectangle respectif du dessin. Le PUPITRE A TUBE CATHODIQUE se réfère à un terminal appro- prié quelconque comportant un clavier pour l'entrée du code d'origine qui doit être compilé et également pour l'entrée de commandes de révision servant à changer le code Le ter- minal comporte également un affichage vidéo pour permettre l'emploi d'un éditeur d'écran Le clavier est, de préfé- rence, solidaire de l'affichage vidéo pour former un pupitre unitaire ayant une liaison série RS-232-C avec le reste du système. Cette liaison série est connectée au POINT D'ACCES D'ENTREE qui est, de préférence, constitué par un ERAS (émet- teur-récepteur asynchrone universel) tel que, par exemple le 1602, le AY5-1013 ou le TMS 5501 Chaque frappe de touche sur le clavier du pupitre à tube cathodique a pour effet la transmission en série à i'ERAS d'un train de bits constituant le multiplet du code ASCII correspondant à la touche frappée. L'ERAS reforme les bits en ce multiplet qui est ensuite trans- mis en parallèle sur le bus de données à l'accumulateur de l'unité de traitement (UDT) L'ERAS forme également un point d'accès de sortie L'exécution d'une commande de SORTIE par l'unité de traitement a pour effet la transmission sur le bus de données d'un multiplet de l'accumulateur à l'ERAS aui peut ensuite transmettre le multiplet en série au PUPITRE A TUBE CATHODIQUE pour affichage sur l'écran vidéo. Dans le mode de fonctionnement habituel d'un micro- ordinateur classique, l'état du point d'accès d'entrée est contrôlé de manière répétée par l'unité de traitement dans une boucle d'appel sélectif jusqu'à ce que l'état du point d'accès d'entrée indique qu'un multiplet de données a été renu et est disponible dans le registre de données reçues D de i'ERA So La présente invention utilise à la place de ce mode, un mode d'interruption du fonctionnement au moyen du- quel l'unité de traitement exécute normalement le compila- teur jusqu'à ceque l'ERAS reçoive un multiplet du PUPITRE A TUBE CATHODIQUE Le compilateur est mis en mémoire dans une zone de la mémoire principale désignée COMPILATEUR sur la Fig 1. La ligne de données disponibles del'ERAS est alors por- tée à un haut niveau et ceci actionne à son tour le CONTRO- LEUR D'INTERUPTION pour provoquer l'exécution,par l'unité de traitement, de l'éditeur Ce dernier est mis en mémoire dans une zone de la mémoire principale désignée EDITEUR sur le dessin Après entrée du caractère reçu dans la MEMOIRE- TAMPON DE CODE D'ORIGINE formée dans la mémoire principale ou après achèvement d'une commande d'édition, une instruc- tion de retour (RET) est exécutée par llunité de traitement pour provoquer sa reprise de l'exécution du compilateur à partir du point o elle a été interrompue. Lorsque le COMPILATEUR est exécuté, il effectue, de préférence, des analyses lexicales, syntactiques et séman- tiques du code d'origine du programme mis en mémoire dans la MEMOIRETAMPON DE CODE D'ORIGINE Dans un mode de réalisation préféré, le COMPILATEUR émet également un code résultant et le met en mémoire dans la Ml EMOIRE-TAMPON DE CODE RESULTANT. Après achèvement de l'entrée et de la compilation du pro- gramme en code d'origine, la commande del'unité de traitement- peut être transmise à l'INTERPRETE pour exécution du code résultant si ce dernier se présente sous la forme d'un code intermédiaire L'option peut être offerte au programmeur de - sauvegarder le code d'origine et/ou le code résultant dans une mémoire secondaire,telle qu'un support sur disque ou sur bande Au lieu d'engendrer un code intermédiaire ("code p"), le COMPILATEUR peut être du type qui émet des codes machine exécutables Le COMPILATEUR peut ne nécessiter qu'un seul passage du code d'origine à la manière du cor mpilateur Pascal descendant récursif usuel Si le COMPILATEUR nécessite plu- sieurs passages, le premier passage devrait, de préférence, effectuer l'analyse syntactique de façon à révéler toutes les erreurs Se syntaxe. Le sys-%me d'interruption permet au programmeur d'arre- ter l'exécuzion du programme en code machine a un moment don- né quelconque, d'examiner les valeurs des variabies,puis de poursuivre l'exécution Aucun matériel supplémentaire n'es-z nécessaire pour cette fonction supplémentaire et le logiciel supplémentaire nécessaire est très peu important. Sur la Fig 2 à laquelle on se référera maintenant, on a représenté les circuits et les éléments du matériel qui interviennent directement dans l'opération d'interruption. Lorsqu'on frappe une touche du PUPITRE A TUBE CATHODIQUE,un train d'impulsions constituant le multiplet correspondant à la touche frappée est transmis par le point d'accès de sor- tie série S du RS-232-C Une porte convertisseuse C 1 conver- tit le train d'impulsions des niveaux RS-232-C aux niveaux TTL (logique à transistor-transistor) pour répondre aux condi- tions du point d'accès d'entrée EN de i'ERAS Ce dernier transforme le train d'impulsions successives en un multiplet de huit bits {octet) qui est mis en mémoire dans le registre des données reçues de l'ERAS Ce dernier émet alors un signal de données disponibles sur une broche DAV, signal qui est transmis par une porte G 1 à une entrée d'interruptions à vec- teurs VI du CODEUR DE PRIORITE. Bien qu'on n'ait représenté qu'une broche d'entrée VI de ce codeur, il est bien entendu que cette microplaquette com- porte d'autres broches d'entrée d'interruptions à vecteurs auxquelles d'autres dispositifs interrupteurs peuvent être connectés. Le CODEUR DE PRIORITE arbitre les demandes d'interru D- tion concurrentes appliquées à ses entrées et détermine qu'elle est la demande qui a la priorité la plus élevée. L'entrée EI de mise en fonction du CODEUR DE P Ri ORITE est * mise à-la masse, comme représenté. Si l'on admet que la demande d'interruption du PUPITRE et de l'ERAS est reconnue prioritaire, le CODEUR transmet alors un code de trois bits A 0, A 1, A 2 aux entrées respec- tives du REGISTRE DE VECTEUR D'INTERRUPTION Les cinq autres entrées de ce registre sont maintenues à l'état positif par une source de tension +V de sorte que le multiplet résultant appliqué à cette microplaquette de registre constitue une instruction d'appel RST Le signal produit sur la broche de sortie GS du CODEUR DE PRIORITE est transmis par une porte G 2 à l'entrée d'activation de verrouillage LE du REGISTRE DE VECTEUR D'INTERRUPTION pour provoquer la mise en mémoire par ce dernier de l'instruction d'appel RST dans ses bas- cules bistables internes. L'activation de la broche de sortie GS du CODEUR DE PRIORITE transmet également un signal d'interruption par- l'intermédiaire d'une porte ET A 1 à la broche de demande d'interruption INT* de l'unité de traitement ZSO Si l'on suppose que l'interruption du processeur est autorisée, après achèvement de l'instruction-en cours, les broches IORQ* et M 1 * d'état de l'unité de traitement sont rendues actives et leurs signaux sont transmis par des portes G 3, G 4 à une porte A 2 pour fo'rmer le signal INTA (AR d'interrup- tion) Ce dernier signal est inversé par une porte G 5 et ap- pliqué à la broche OE d'activation de la sortie du REGISTRE DE VECTEURD'INTERRUPTION à la suite de quoi l'instruction d'appel RST appliquée aux entrées de ce registre est chargée sur le BUS DE DONNEES. L'instruction RST est alors entrée dans l'unité du trai tement Z 80 qui l'exécute,ce qui a pour effet qu'elle refoule le contenu du compteur de programme dans la pile et qu'elle effectue un saut à un emplacement prédéterminé de la partie basse de la mémoire Cet emplacement contient un "vecteur" ou instruction de saut (JMP) de trois multiplets à une rou- tine de service des interruptions Cette dernière contient l'éditeur ainsi qu'une sous-routine pour mettre en mémoire le contenu des registres de l'unité de traitement La com- ande de l'unité de traitement est alors conservée par l'édi- teur jusqu'à ce qu'un caractère ait été entré dans la mémoire- tampon de code d'origine ou qu'une opération d'édition ait été achevée. L'éditeur comporte une instruction d'entrée qui, lors- qu'elle est exécutée, a pour effet que l'unité de traitement place l'adresse du point d'accès de l'ERAS sur le BUS D'A- DRESSE Cette adresse est vérifiée par le COMPARATEUR et si elle correspond à celle du point d'accès, la broche de sor- tie EOUT est rendue active pour le signaler au DECODEUR Ce dernier est commandé par d'autes signaux de commande et d'é- tat (non représentés) de la manière classique de façon à transmettre un signal RDE* à l'entrée correspondante RDE de l'ERAS Le multiplet contenu dans le registre des données reçues (non représenté) de l'ERAS est alors appliqué sur le BUS DE DONNEES et transmis à l'accumulateur qui fait partie de l'unité de traitement. Dans le mode de réalisation préféré de l'invention re- présenté sur la Fig 2, les circuits intégrés utilisés peuvent être les suivants. ERAS: 1602 CODEUR DE PRIORITE: 74 L 5148 REGISTRE DE VECTEUR D'INTERRUPTICN: 74 L 5373 DECODEUR: 74 L 5155 COMPARATEUR: 25 L 52521 C 1: 1489 C 2: 1488 Sur la Fig 3 à laquelle on se référera maintenant, on a représenté la séquence générale des opérations du sys- tome Le COMPILATEUR détient normalement a commande de l'unité de traitement et est soit dans une boucle infinie après avoir atteint une Marque de Pause dans la mémoire-tam- pon de code d'origine soit en train d'analyser le code d'o- rigine qui se trouve dans la mémoire-tampon. Lorsqu'il se produit une FRAPPE DE TOUCHE sur le termi- nal, ceci provoque une INTERRUPTION à la suite de quoi l'or- dinateur est envoyé à la routine de service des interruptions. Cette dernière comporte une sous-routine pour exécuter l'o- pération SAUVEGARDER LES REGISTRES indiquée sur le dessin. L'EDITEUR est alors exécuté par l'unité de traitement. Si la FRAPPE DE TOUCHE correspond à un caractère de commande, une procédure d'édition, telle qu'un déplacement du curseur, un défilement de l'image, sur l'écran, une suppression de caractère ou une suppression de ligne, est effectuée Si la FRAPPE DE TOUCEHE correspond à un caractère alphanumérique ou autre caractère de code d'oricine valide, ce dernier est entré dans la mémoire-tampon de code d'origine et affiché sur l'écran vidéo et le curseur d'écran est avancé à la position de caractère suivante. La routine de service des interruptions effectue alors un saut à sa sous-routine pour effectuer sa procédure RESTAU- RER LES REGISTRES au moyen de laquelle les registres de l'u- nité de traitement sont remis à leurs valeurs d'origine qu'ils avaient au moment de l'interruption. L'instruction AUTORISER LESINTERRUPTIONS (El) est alors exécutée par l'unité de traitement de façon que cette aer- nière puisse répondre à l'interruption suivante Enfin, l'ins- truction RET est exécutée de façon que l'ordinateur puisse RETOURNER AU COMPILATEUR Le compilateur reprend alors l'exé- cution au point o elle avait été interrompue. Sur la Fig 4 à laquelle on se référera maintenant, on a représenté la séquence des opérations du compilateur Après initialisation, le compilateur effectue tout d'abord sa fonc- tion LIRE CARACTERE au moyen de laquelle le multiplet contenu dans le premier emplacement de la mémoire-tampon du code d'o- rigine est lu. Si ce multiplet est le code prédéterminé désigné Marque de Pause, le pointeur du compilateur n'avance pas et le compilateur entre dans unc boucle infinie dans laquelle il-continue de lire le idême emplacement jusqu'à ce que le contenu soit changé en un blanc par l'éditeur Lorsque ce changement se produit, le poihnteur de la mémoire du compila- teur est incrémenté à l'emplacement suivant de la mémoire- tampon de sorte que le compilateur sort de sa boucle de Pause comr e indiqué par l'inscription AVANCER POINTEUR DE MEMOIRE. Comme indiqué par l'inscriptiod'SYMBOLE? ", l'analyseur lexical du compilateur détermine alors si le caractère d'ori- gine lu constitue le dernier caractère d'un symbole, tel qu'un identificateur, un opérateur ou une marque de ponctua- tion Dans la négative, la fonction LIRE CARACTERE est à nouveau exécutée jusqu'à ce qu'un symbole soit reconnu. L'analyseur de syntaxe du compilateur détermine alors si ce symbole est conforme à une SYNTAXE CORRECTE en conformité avec la grammaire du langage de programmation Si le symbole n'est pas conforme à la syntaxe, un MESSAGE D'ERREUR est af- fiché. Si la syntaxe est correcte, la fonction LIRE CARACTERE est répétée jusqu'à cequ'une erreur soit trouvée ou que la FIN DU PROGRAMME soit atteinte Dans ce cas, le GENERATEUR DE CODE peut être appelé si cette fonction est exécutée sous la forme d'un passage séparé Alternativement, la génération du code peut être effectuée concurremment avec les analyses lexicales et syntactiques Le code engendré peut alors être mis en mémoire sur disque et/ou exécuté, au choix du pro- grammeur, comme indiqué par l'inscription SAUVEGARDER/-EX 4 CU- TER CODE RESULTANT. Pour la clarté de l'illustration, on montrera comment le compilateur simple et très largement publié PL/0 du pro- fesseur N Wirth (Doc N 12) peut être modifié pour la mise en oeuvre de la présente invention Dans la description qui suite on a ajouté les identificateurs ci-après qui n'appa- raissent pas dans le compilateur PL/0 d'origine tel que publié. CONT, PEEK, RECOMPILE, PTR, PM et SP La première instruction dans le compilateur modifié est: SI NON CONT ALORS La variable booléenne CONT est FAUSSE lors de l'entrée initiale dans le compilateur, ce qui signifie que ce n'est pas une continuation d'une exécution précédente En d'autres termes, le compilateur vient juste d'être entré pour la pre- mière fois au cours de laprésente session Les instructions d'affectation suivntes sont, par conséquent, exécutées pour initialiser le contenu des tableaux W ORD, WSYM, SSYM, MNEM 1 ONIC, DECLBEGSYS, STATBEGSYS et FACBEGSYS représentés aux pages 346, 347 du traité de Wirth (Doc n 12) Les valeurs de ces ta- bleaux restent fixes pendant toute l'exécution du compilateur et l'instruction conditionnelle SI ci-dessus évite la néces- sité de ré-exécuter toutes ces ins:ructions d'affectation à la suite des-ré-initialisations du compilateur pour les recom- pilations En d'autres termes, après la première vérification de la variable CONT,celle-cl est mise à VRAI de façon à con- tourner ensuite les instructions d'affectation lorsqu'une re- compilation est requise. Après le bloc conditionnel d'affectation des tableaux, une fonction de langage d'assemblage PEEK est appelée pour lire le contenu de l'emplacement de mémoire qui précède immé- diatement le début de la mémoire-tampon de code d'origine, emplacement dans lequel est contenu l'Indicateur de Recompi- lation Si,dans cet emplacement,le code ASCII représentant la lettre "R" a été chargé par l'éditeur,une procédure du compilateur RECOMPILE est appelée pour ré-initialiser les variables ERR, CC, CX et LL et pour attribuer la valeur de constante AL ( 10) à la variable KK. La procédure RECOMPILE met également la valeur d'une variable pointeur PTR égale à l'adresse de début de la mé- moire-tampon de code d'origine Le pointeur PTR est le poin- teur de mémoire de l'analyseur lexical du compilateur et il est successivement avancé multiplet par multiplet du code d'origine pour lire ce dernier l'analyseur lexical lit le multiplet contenu dans l'emplacement de mémoire désigné par le pointeur PTR. L'analyseur lexical comporte également une autre modifi- cation importante du compilateur PL/0 Cette modification est incluse dans la procédéure GETSYM dans laquelle est également imbriquée la procédure GETCH. GETSYM a en tant que premiere instruction: PENDANT QUE CH=' ' EXECUTER GETCH; Ceci constitue une partie d'une boucle infinie qui se répète tant que la procédure GETCH retourne le code ASCII ( 32) qui représente un espacement Comme expliqué ci-dessus, la procédure GETCH retourne le code d'espacement 32 chaque fois qu'elle lit la Marque de Pause. La première instruction de GETCH est: CH: = PTR-; de façon à charger dans la variable CH le contenu de l'em- placement de la mémoire de code d'origine désigné par la va- riable pointeur PTR L'instruction suivante de la procédure GETCH est: SI CH = CHR(PM) ALORS vérifiant ainsi si le multiplet lu est le Masque de Pause PM qui est une constante égale à 35 On a choisi cette valeur étant donné que c'est un caractère visible et qu'elle n'était pas autrement utilisée. L'instruction suivante suit la clause SI: CH: = CHR (SP) dans laquelle SP est égal au code ASCII ( 32) pour un espace- ment La commande retourne alors à GETSYM dans laquelle la condition de la clause PENDANT QUE est satisfaite de sorte qu'elle appelle à nouveau la procédure GETCH Cette séquence est répétée et se traduit par une boucle infinie tant que le multiplet contenu dans l'emplacement de mémoire qui est lu est la Marque de Pause. Après que l'éditeur a remplacé ce multiplet de Marque de Pause par le code ASCII représentant un espacement,la boucle est interrompue du fait que la condition-booléenne de la clause SI n'est plus satisfaite (la variable CH n'est pas égale à PM) Au lieu de cela la clause SINON suivante est exécutée de façon à faire avancer le pointeur PTR de la mémoire de code d'origine à l'emplacement de mémoire suivant, par l'instruction: PTR: = PTR + 1; après quoi l'appel suivant de la procédure GETCH lit l'empla- cement suivant de la mémoire de code d'origine, pour per- mettre au compilateur de poursuivre son avance à travers le code d'origine le pointeur PTR esz avancé de manière répétée à chaque appel de la procédure GETCH jusqu'à ce qu'il at- teigne la nouvelle Marque de Pause introduite par l'éditeur, comme décrit ci-dessous. Sur la Fig 5-à laquelle on se référera, on a représen- té la séquence des opérations de l'éditeur La fonction EN- TRER CARACTERE est tout d'abord exécutée en réponse à FRAPPE DE CARACTERE (Fig 3) L'éditeur détermine alors si le multiplet entré est un CARACTERE DE COMMANDE Dans la né- gative, le caractère est entré dans la mémoire-tampon de code d'origine, comme indiqué par l'inscription CAR DANS MEM-TAMPON Le caractère entré est également affiché sur l'é- cran comme indiqué par l'inscription CAR TRANS A ECRAN PU- PITRE Si le caractère entré est un caractère de commande, l'éditeur détermine alors s'il s'agit d'un RETOUR DU CHA- RIOT? Dans la négative, la routine de l'éditeur -appropriée pour traiter les caractères de commande est appelée, comme, indiqué par l'inscription TRANSF A ROUTINE CAR DE COM et comme on le décrira ci-dessous en se référant à la Fig 6. Comme représenté sur la Fig 5 à laquelle on continue- ra de se référer, si le caractère entré est un retour du chariot, une nouvelle Marque de Pause est écrite dans la mé- moire-tampon de code d'origine dans l'emplacement adjacent à la fin de la ligne en cours, comme indiqué par l'inscrip- tion INTRODUIRE NOUVELLE MARQUE DE PAUSE L'ancienne Marque de Pause est changée en un blanc (espacement) comme indiqué par l'inscription RETIRER ANCIENNE MARQUE DE PAUSE. Pour faciliter la localisation ultérieure de l'emplace- ment de la Marque de Pause, un emplacement de mot de mémoire est réservé en tant que Registre de Pause pour mettre en mé- moire l'adresse de l'emplacement de la Marque de Pause L'a- dresse de la nouvelle Marque de Pause est ainsi mise en mé- moire dans ce registre de la mémoire, comme indiqué par l'inscription METTRE A JOUR REGISTRE DE PAUSE Le code ASCII représentant un retour de chariot ( 13) est alors entré dans la mémoire-tampon de code d'origine dans l'emplacement adja- cçent à la Marque de Pause, comme indiqué par l'inscription o INTRODUIRE CAR DANS MEM-TAMPON Le code ASCII représentant une avance de ligne ( 10) peut être entré après le retour du chariot, si cette convention est désirée. Sur la Fig 6 à laquelle on se référera maintenant, on a représenté la séquence des opérations des routines de l'é- diteur pour traiter les caractères de co Lmmande entrés au pu- pitre Le caractère entré est tout d'abord vérifié pour dé- terminer si c'est le code correspondant à l'opération de REMONTEE DU CURSEUR Dans la négative, une vérification est alors effectuée pour déterminer si c'est le code correspon- dant à l'opération de REMONTEE DE L'IMA GE (vers le début du programme ce qui correspond,en pratique,à un défilement de l'image vers le bas) Dans la négative, le caractère de com- mande est traité de la manière classique que l'on ne décrira pas davantage, comme indiqué par l'inscription TRAITER AUTRES CARACTERES DE COMMANDE. Si le caractère de commande entré est le code qui repré- sente la REMONTEE DU CURSEUR ou celui qui représente la REMONTEE DE L'IMAGE, l'opération respective REMONTER LE CURSEUR ou FAIRE DEFILER L'IMAGE est exécutée Dans le premier cas, le curseur est déplacé d'une ligne vers le haut sur l'écran vidéo. Dans le second cas, l'écran est effacé et ré-écrit pour affi- cher les lignes de la mémoire-tampon de code d'origine qui précèdent immédiatement les lignes effacées. Comme indiqué par l'inscription INTRODUIRE NOUVELLE MARQUE DE PAUSE, une nouvelle Marque de Pause est introduite à l'emplacement immédiatement adjacent à la fin de la ligne de la mémoire-tampon de code d'origine qui précède la ligne qui porte la nouvelle position du curseur Les opérations RETIRER ANCIENNE MARQUE DE PAUSE et METTRE A JOUR REGISTRE DE PAUSE sont alors effectuées de la manière que l'on a dé- crite ci-dessus en se référant à la Fig 5. L'opération METTRE INDICATEUR DE RECOSMPILATION provoque la ré-initialisation du compilateur lorsque ce dernier re- prend la commande de l'unité de traitement après le retour de la routine de service de l'interruption Cet indicateur est, de préférence, un eimplacement de la mémoire dans leqeul un code prédéterminé peut être chargé pour informer le compi- lateur qu'une recompilation du code d'origine est requise. Dans le mode de réalisation préféré, cet indicateur de recompilation est r is pour requérir une recompilation chaque fois que le curseur est déplacé vers le haut ou que l'on remonte l'image En d'autres termes, on admet que chaque fois que le curseur est déplacé de façon à désigner un code d'origine qui peut avoir déjà été compilé, ce code sera changé de façon à nécessiter une recompilation. Une autre méthode consisterait à ne mettre l'inducteur de recompilation que si le code précédemment compilé est effectivement changé étant donné qu'il se peut que le pro- gralleur fasse défiler l'image dans un sens puis dans l'autre sans apporter aucun changement au code d'origine. Encore une autre solution consisterait à créer dans la mémoire un registre qui contiendrait l'adresse de la der- nière position du pointeur du compilateur L'éditeur pourrait alors comparer cette adresse à l'emplacement de la mémoire- tampon de code d'origine désignée par le curseur pour déter- miner si des changements d'édition sont en train d'être ap- pcrtés à un code d'origine qui a déjà été compilé. Bien que ces autres méthodes entraînent un plus petit nombre de recompilations, le mode de réalisation préféré pré- sente l'avantage d'une mise en oeuvre plus simple En outre, le processus de recompilation est tellement plus rapide que la frappe manuelle du code d'origine au pupitre que le com- pilateur pourra recompiler tous le programme et rattraper le programmeur avant que ce dernier ait eu le temps de taper plus de quelques nouvelles lignes de code sauf dans le casde programmes extrêmement volumineux Par conséquent, la réduc- tion du nombre des recompilations au minimum absolu n'est pas essentielle. L'éditeur est écrit en Pascal avec des appels à seize procédures et fonctions en langage d'assemblage externes. On décrira maintenant celles de ces routines qui sont propres à la présente invention. Lors de l'entrée de l'éditeur, la variable bool enne ECONT est vérifiée pour déterminer si cet appel de l'éditeur est la première entrée de la présente session ou une conti- nuation Si la variable ECONT est FAUSSE,elle est alors mise à VRAI et les procédures suivantes: INIT, NEWFILE, VECTOR et TOPLO sont exécutées. D La procédure INIT remet à zéro la mémoire-tampon de code d'origine, met le pointeur de mémoire au début de la mém-ire- tampon, introduit la Marque de Pause dans le premier emplace- ment de la mémoire-tampon, met le contenu du Registre de Pause égal à l'adresse de ce premier emplacement, initialise le cur- seur à la première rangée et à la première colonne de l'écran et met le pointeur d'indicateur de recompilation de façon qu'il désigne l'emplacement de la mémoire qui précède le pre- mier multiplet de la mémoire-tampon. La procédure NEWFTILE souffle au programmeur qu'il doit choisir soit un nouveau fichier pour l'entrée du Code d'ori- gine soit un ancien fichier pour l'exécutiorn d'une révision. Dans ce dernier cas, le fichier est chargé dans la mémoire- tampon de code d'origine à partir d'ul disque et la premiere image d'écran de code d'origine est affichée. La procédure VECTOR appelle la procédure d'assemblage externe POKE trois fois pour mettre en mémoire dans la par- tie basse de la mémoire ( 20 H) le vecteur de saut à une sous- routine SAVREGS qui met en mémoire le contenu des registres de l'unité de traitement En réponse à une interruption ren- due active par la frappe d'une touche sur le clavier du pu- pitre, l'unité de traitement exécute l'instruction d'appel RST 4 et exécute ce vecteur de saut puis la sous-routine SAVREGS Après que les registres ont été sauvegardés,une instruction de saut contenue dans la sous-routine envoie l'unité de traitement à l'éditeur. La procédure TOPL O transmet la commande au compilateur PL/0 Elle est habituellement appelée après que l'éditeur a achevé l'entrée du caractère ou la fonction d'édition correspondant à la touche frappée sur le clavier du terminal. Dans ce cas, la procédure est appelée après initialisation *de l'éditeur. L'instruction suivante de l'éditeur n'est atteinte que lorsqu'une interruption se produit en réponse à la frappe d'une touche Cette instruction charge dans une variable le coda ASCII entré provenant du registre des données reçues de l'ERAS Ce multiplet d'entrée est vérifié pour déterminer v s'il s' agit d'un caractère de commande ou d'un caractère al- ph-anurérique (supérieur à 31) Dans ce dernier cas, le multi- plet est entré dans la mémoire-tatpon de code d'origirm et affiché sur l'écran vidéo de la manière classique. Si le multiplet entré est soit le code de comzande pour déplacer le curseur vers le bas soit le code de commande pour remonter l'image, la procédure appropriée est appelée et se ternine par l'appel de la procédure de mise à jour UPDATE. Cette dernière entre dans la mémoire-tampon de code d'ori- gine une nouvelle Marque de Pause dans l'emplacement adjacent à la fin de l'ancienne ligne dans le cas d'une opération de descente du curseur et dans l'emplacement adjacent à l'extré- mité de la ligne non visible qui précède la première ligne affichée dans le cas d'une opération de descente de l'image. L'opération de mise à jour UPDATE supprime également l'an- cienne Marque de Pause en remplaçant la Marque de Pause con- tenue dans l'ancien emplacement de cette dernière par le code ASCII qui représente un espacement ( 32) le Registre de Pause est également mis à jour à l'adresse de l'emplace- ment de la nouvelle Marque de Pause. Si le multiplet d'entrée est soit le code de commande pour déplacer le curseur vers le haut soit le code de com- mande pour remonter l'image d'écran en direction du début du code d'origine, la procédure correspondante est appelée pour effectuer l'opération respective Cette procédure se termine par les appels de la procédure précédemment décrite de mise à jour UPDATE et également de la procédure RECOMPILE. Cette dernière met en mémoire le code ASCII représentant la lettre "R" dans l'emplacement de mémoire qui précède immédia- tement le début de la mémoire-tampon de code d'origine de fa- çon à constituer-l'indicateur de recompilation ci-dessus men- tionné Après achèvement de l'opération de remontée du cur- seur ou de remontée de l'image d'écran,i'unité de traitement retourne au com Dilateur cui vérifie l'indicateur de recom- pilation, détermine que cet indicateur est mis puis appelle sa Procédure de ré-initialisation pour contraindre le compi- lateur à recompiler le code d'origine depuis le début de la mémoiretampon de code d'origine. Si le multiplet entré est le code ASCII qui représente le retour du chariot ( 13), la procédure CRET est appelée. Cette routine entre dans la mémoire-tampon de code d'origine une nouvelle Marque de Pause dans l'emplacement adjacent au code de retour du chariot, retire l'ancienne Marque de Pause, met à jour le Registre de Pause, et exécute d'autres fonc- tions plus classiques,telles que l'entrée du code d'avancede ligne dans la mémoire-tampon, la mise à jour du curseur et le défilement de l'affichage vidéo si la ligne en cours est la dernière ligne de l'écran. Ir doit être bien compris que le mode de réalisation préféré décrit cidessus et représenté sur les dessins a été donné uniquement à titre d'illustration de l'une des nom- breuses formes sous lesquelles l'invention peut être mise en oeuvre et que de nombreuses modifications peuvent être apportées à ce mode de réalisation par les spécialistes de la technique sans s'écarter pour cela du cadre des revendir cations annexées. Par exemple, au lieu de réaliser la Marque de Pause sous forme d'un code prédéterminé entré dans un emplacement de mémoire à l'intérieur de la mémoire-tampon de code d'ori- gine, l'emplacement de pause peut être défini pour le compi- lateur par une adresse de mémoire contenue dans un registre. Le compilateur peut alors être empêché d'analyser le code mis en mémoire dans les emplacements de mémoire situés au- delà de cette adresse qui peut être incrémentée et décré mentée par l'éditeur. En outre, l'interruption qui provoque le transfert de la commande de l'unité de traitement du compilateur à l'édi- teur peut être rendue active par un minuteur ou une horloge au lieu de l'être au moyen du clavier En d'autres termes, le compilateur peut être interrompu périodiquement et le point d'accès d'entrée peut être appelé sélectivement pour déterminer si une touche a été frappée Dans la négative, l'interruption est terminée et la commande retourne au com- pilateur Si l'appel sélectif du point d'accès révèle qu'une touche a été frappée,l'éditeur de la routine de service des interruptions prend la commande et est exécuté de la manière que l'on a décrite ci-dessus en se référant au mode de réa- lisation préféré décrit Pour la plupart des applications, des interruptions pilotées par horloge à des intervalles d'environ 10 à 30 millisecondes doivent être suffisamment fréquentes pour rester au niveau de la fréquence de frappe des touches sur le clavier. En outre, l'indicateur de recompilation peut être mis chaque fois que le compilateur détermine que le code d'ori- gine contient une erreur En d'autres termes, on peut ad- mettre que chaque fois qu'une erreur est révélée, le code d'origine sera modifié de sorte qu'il nécessitera une recom- pilation. Une autre modification possible consiste à supprimer l'exigence d'une recompilation à partir du tout début du code d'origine dans le cas o l'erreur se produit dans la dernière ligne achevée de code d'origine Pendant la compi- lation de la ligne, les valeurs de registre résultantes, les entrées dans les tables, les manipulations de piles, les a- fectations de variables et les entrées dans la mémoire- tampon de code sont temporairement mises en mémoire et ne sont finalement entrées que lorsque l'analyse syntactique de la ligne de code d'origine est achevée et détermine que la ligne est conforme à la grammaire Si la ligne contient une erreur, ces entrées temporaires sont supprimées et le pointeur du compilateur est ramené à l'extrémité de la ligne précédente, évitant ainsi la recompilation Cependant, cette méthode exige encore une recompilation si les lignes de code d'origine qui précèdent la dernière ligne sont modifiées. Encore untre possibilité serait de faire avancer la Marque de Pause par l'éditeur après l'entrée de chaque carac- tère ou après l'entrée de chaque symbole délinité Ceci pré- 2533721 t senterait l'avantage de révéler une erreur presqu'instanta- nrément lors de son entrée au clavier L'inconvénient serait qu'une recompilation serait nécessaire pour toutes les pe- tites erreurs de fragpe sans donner au procranm eur la possibi- lité de les corriger avant qu'ellessoient explorées et ana- lysées syntactiquement. BIBLIOGPPHIE 1 L V Atkinson, et autres, "Context Sensitive Editing as an Ap Droach to _ncrérmental Compilation", The Computer Journal, Tome 24, n 3, 1981, pages 222-229, Heyden & Son Ltd. 2 L V Atkinson et S D North, "COPAS A Conversational Pascal System", Softw- are Practice and Experience, Tome11, 1981, pages 819-829, John Wiley & Sons Ltd. 3 R B Ayres et R L Derrenbacher, "Partial Recompilation", Spring Joint Computer Conference, 1971, pages 497-502. 4 F T Baker et H D Mills, "Chief Programmer Teams", Classics in Softwate Engineering, Edité par E N Yourdon, Yourdon Press, pages 195-204. L Bolliet, et autres, "D 2 IA 2 'AG: A ulti-Access System for On-Line Algol Programming", Proc Spring JCC 1967, pages 547-552. 6 P J Brown, "Writting Interactive Compilers and Inter- preters, Ch 2 4, pages 41-45, John Wiley & Sons. 7 J Earley et P Caizergues, "A Method for Incrementally Compiling Languages with Nested Statement Structure", Commu- nications of the ACM, tome 15, N 12, Déc 1972, pages 1040- 1044. 8 K Lock, "Structuring Programs for Multiprogram Time- Sharing On-Line Applications", Proc Fall JCC 1965, pages 457-472. 9 J Pournelle, User's Column, BYTE, Sept 1982, page 324. J L Ryan, et autres, "A Conversational System for Incremental Compilation and Execution in a Time-Sharing Environment", Proceedings Fall Joint Computer Conference, 1966, pages 1-21. 11 S Sonderstrup et M Pelle, "COMAL-80 A New Language?", Dr Dobb's Journal, n 56, Jiin 1981, pages 14-15, 46-47. 12 N Wirth, "Algorithms + Data structures-= Programs", Ch 5, pages 280347, 1976, Prentice-Hall, Inc. REVENDICATIONS 1 Un système de micro-ordinateur pour l'entrée et la com- pilation en temps réel à pe près simultanées d'un programme d'origine, caractérisé en ce au'i comporte: un pupitre pour l'entrée de caractères successifs constituant le programme d'origine; une mémoire à s emi-conducteur pour mettre en mé- moire le programme d'origine et un programme résultant qui résulte de la traduction du programme d'origine, cette mé- moire contenant également un compilateur et une routine de service des interruptions; une unité de traitement ayant une entrée d'interruptions, un compteur de programme, une série de registres et des moyens fonctionnant en réponse à l'acti- vation de l'entréed'interru Dptionpour charger dans le pro- gramme une adresse de vecteur qui désigne la routine de ser- vice des interruptions; ledit compilateur détenant normale- ment la commande de l'unité de traitement pour compiler le programme d'origine partiel à mesure que ce dernier est entré dans la mémoire; le compilateur Comprenant des moyens pour traduire le programme d'origine partiel en code résultant et pour entrer ce dernier dans la mémoire; des moyens fonction- nant en réponse au fonctionnement du pupitre pour rendre ac- tive l'entrée d'interruption et faire passer, de ce fait, la co maande de l'unité de traitement,du compilateur à la rou- tine de service des interruptions; la routine de service des interruptions comprenant des moyens pour mettre en mémoire le contenu des registres; la routine de service des interrup- tions comprenant un éditeur pour entrer successivement les caractères entrés dans des emplacements choisis de la mémoire et pour exécuter les commandes d'édition; l'éditeur compre- nant des moyens pour désigner un emplacement dans le pro- gramme d'origine mis en mémoire, emplacement o le compila- teur doit faire une pause tout en attendant l'entrée d'une autre partie du programme d'origine; le compilateur compre- nant une boucle d'exécution, lorsque le compilateur atteint l'emplacement de pause désigné et qui est exécutée jusqu'à ce que l'emplacement soit changé; l'éditeur faisant avancer l'emplacement de pause lorsque des parties supplémentaires du programme d'origine sont entrées; la routine de service des interruptions comportant des moyens pour restaurer le contenu d'origine ues registres et pour retourner la com- mande de l'unité de t^aitement au compilateur à la suite de l'achèvement soit de la mise en mémoire d'au moins un carac- tère entrée soit de l'exécution d'une commande d'édition. 2 Un système d'ordinateur selon la revendication 1, carac- térisé en ce que l'éditeur comprend des moyens pour modifier une partie du programme d'origine qui a été précédemment compilé par le compilateur; et des moyens pour ré-initiali- ser le compilateur afin de provoquer la recompilation par ce dernier du programme d'origine après que ladite partie compilée a été modifiée. 3 Un système d'ordinateur selon la revendication 1, carac- térisé en ce que le pupitre comporte un écran d'affichage et un clavier muni de touches; l'éditeur comportant des moyens sélectifs pour afficher sur l'écran une partie choi- sie du programme d'origine mis en mémoire dans la mémoire; un curseur pour désigner sur l'écran l'emplacement du pro- gramme d'origine qui doit être modifié par l'opération de l'éditeur; des moyens pour déplacer le curseur sur l'écran en réponse à la frappe de touches prédéterminées du clavier; et des moyers fonctionnant en réponse au déplacement du cur- seur afin de déplacer l'emplacement de pause jusqu'a un point précédant l'emplacement du programme désigné par le curseur après que le curseur a été déplacé vers le haut dans une direction correspondant à un retour vers le début du pro- gramme d'origine. 4 Un système d'ordinateur selon la revendication 3, carac- térisé en ce qu'il comporte des moyens pour ré-initialiser le compilateur en réponse au déplacement du curseur vers le haut, provoquant ainsi la recompilation du programme par le compilateur. Un système d'ordinateur selon la revendication 1, carac- térisé en ce que le pupitre comporte un écran d'affichage et un clavier muni de touches; l'éditeur comportant des moyens pour afficher sur l'écran une partie choisie du pro- gramme d'origine mis en mémoire dans la mémoire; un curseur pour désigner sur l'écran l'em Dlacement du programme d'ori- cine qui doit être modifié par l'opération de l'éditeur; des moyens pour déplacer le curseur sur l'écran en réponse à la frappe de touches prédéterm inées du clavier; des moyens tour déplacer l'emplacement de pause jusqu'à un point précédant l'emplacement du programme désigné par le curseur après que le curseur a été déplacé vers le haut dans une direction cor- respondant à un retour vers le début du programme d'origine; et des moyens pour ré-initialiser le compilateur après que le curseur a été déplacé vers le haut,provoquant ainsi la recompilation par le compilateur du code d'origine. 6 Un système d'ordinateur pour l'entrée et la compilation en temps réel à peu près simultanées d'un programme, carac- térisé en ce qu'il comporte-:un pupitre pour entrer des carac- tères successifs constituant le code d'origine du programme; une mémoire pour mettre en mémoire le code d'origine et éga- lement pour mettre en mémoire un compilateur et un éditeur; l'éditeur comprenant des moyens pour entrer successivement dans la mémoire les caractères entrés et pour exécuter des commandes d'édition; une unité de traitement; le compilateur ayant normalement la commande de l'unité de traitement pour analyser syntactiquement le programme d'origine partiel mis en mémoire dans la mémoire; des moyens pour transmettre la commande de l'unité de traitement du compilateur à l'éditeur; des moyens pour désigner un emplacement dans le programme d'origine o le compilateur doit faire une pause tandis qu'il attend l'entrée d'une autre partie du programme d'ori- gine; le compilateur comprenant des moyens pour effectuer une pause lorsque le compilateur atteint l'emplacement de pa'se désigné; des moyens pour faire avancer l'emplacement de pause lorsque des parties supplémentaires du programme d'origine sont entrées; et des moyens pour retourner la commande de l'unité de traitement au compilateur après achèvement soit de l'entrée d'au moins un caractère entré soit de l'exé- cution d'une commande d'édition. 7 Un système d'ordinateur selon la revendication 6, carac- térisé en ce que l'unité de traitement comprend une série de registres; des moyens pour sauvegarder le contenu de ces registres lorsque 2 a commande est transmise du compilateur l'éditeur; et des moyens pour restaurer le contenu des re- gistres à la suite du retour de la commande de l'éditeur au compilateur. 8 Un système d'ordinateur selon la revendication 6, carac- térisé en ce cue i' idil Jeur cxrporte des moyens pour modifier le code d'origine qui a préce_- rent fait l'objet d'une za- lyse syntactique par le compilateur; et des moyens pour re- initialiser le compilateur pour provoquer la recompilation par ce dernier du code d'origine après que le code analysé syntactiquement a été modifié. 9 Un système d'ordinateur selon la revendication 6, carac- térisé en ce qu'il comporte: un écran d'affichage; des moyens pour afficher sur l'écran une partie du code d'origine mis en mémoire dans la mémoire; un curseur pour désigner sur l'écran l'emplacement du code d'origine qui doit être modifié par une opération de l'éditeur; des moyens pour déplacer le curseur sur l'écran en réponse au fonctionnement du pupitre; et des moyens pour déplacer l'emplacement de pause jusqu'à un point précédant l'emplacement désigné par le curseur après que le curseur a été déplacé vers le haut dans une direction qui correspond à un retour vers le début du programme d'ori- gine. Un système d'ordinateur selon la revendication 9, carac- térisé en ce qu'il comporte des moyens pour re-initialiser le compilateur après que le curseur a été déplacé vers le haut, provoquant ainsi la recompilation du code d'origine par le compilateur. 11 Un système d'ordinateur pour l'entrée et la compilation en temps réel à peu près simultanées d'un*code d'origine, caractérisé en ce qu'il comporte: une mémoire ayant une mé- moire-tampon de code d'origine; un clavier; un éditeur pour entrer et réviser un code d'origine dans la mémoire-tampon; un compilateur pour effectuer des analyses lexicales et syn- tactiques du code d'origine lorsque ce dernier est entré dans la mémoiretampon; des moyens d'interruption actionnables pour interrompre le compilateur et pour appeler l'éditeur en réponse à l'actionnement du clavier; des moyens limiteurs pour empêcher le compilateur d'essayer d'analyser le code au-delà d'emplacem ents de la mémoire-tampon déterminés par l'éditeur; et des moyens pour retourner la commande du sys- tème a compilateur à la suite de l'achèvement d'une fonction d'édition. 12 Un système d'ordinateur selon la revendication 11, ca- ractérisé en ce qu'il comporte: un écran d'affichage; des moyens pour afficner sur l'écran une partie du code d'ori- gine mis en mémoire dans la mémoire-tampon; un curseur pour désigner sur l'écran l'emplacement du code d'origine qui doit être modifié par une opération de l'éditeur; des moyens pour déplacer le curseur sur l'écran en réponse à la frappe de touches prédéterminées sur le clavier; et des moyens pour déplacer l'emplacement de pause jusqu'à un point précédant l'emplacement de la mémoire-tampon désigné par le curseur. 13 Un système d'ordinateur selon la revendication 11, ca- ractérisé en ce que les moyens limiteurs comprennent des moyens pour identifier un emplacement de pause de la mémoire- tampon de code d'origine; un emplacement o le compilateur. doit s'arrêter jusqu'à ce que ladite identification soit très changée par l'éditeur; et des moyens pour faire avancer l'em- placement de pause après qu'une quantité prédéterminée de nouveau code d'origine a été ajoutée à la mémoire-tampon de façon à permettre au compilateur d'analyser le nouveau code d'origine. 14 Un système d'ordinateur selon la revendication 11, ca- ractérisé en ce qu'il comporte:une unité de traitement ayant une série de registres; des moyens pour sauvegarder le con- tenu des registres lorsque le compilateur est interrompu; et des moyens pour restaurer le contenu des registres après le retour dela commande de l'éditeur au compilateur. 15 Un système d'ordinateur selon la revendication 11, ca- ractérisé en ce qu'il comporte des moyens pour modifier une partie précédemment compilée du code d'origine; et des moyens pour réinitialiser le compilateur pour qu'il recompile le programme d'origine après modification de la partie précédem- ment compilée du code d'origine. 16 Un système d'ordinateur pour l'entrée et la compilation en temps réel à peu près simultanées d'un code d'origine, ca- ractérisé en ce qu'il comporte:un éditeur pour -'entrée et la modification du code d'origine; un compilateur qui détient normalement la commande du système pour traiter le code d'ori- gine sauf lorsqu'il est interrompu; et des moyens de retour pour retourner la commande du système d'ordinateur,de l'édi- teur au compilateur,après que l'éditeur a achevé une opéra- tion d'entrée ou de modification du code d'origine. 17 Un système d'ordinateur selon la revendication 16, ca- ractérisé en ce qu'il comporte des moyens pour identifier un point de pause du code d'origine, emplacement ou le compila- teur doit s'arrêter jusqu'à ce que ladite identification ait été changée; et des moyens pour faire avancer le point de pause après qu'une quantité prédéterminée de nouveau code d'origine a été entrée de façon à permettre au compilateur de traiter le nouveau code d'origine. 18 Un système d'ordinateur selon la revendication 16, ca- ractérisé en ce qu'il comporte des moyens pour ré-initiali- ser le compilateur après modification du code d'criginre,pro- voquant ainsi la recompilation par le compilateur du code d'origine modifié. 19 Un système d'ordinateur selon la revendication 16, ca- ractérisé en ce qu'il comporte un terminal ayant un clavier; et des moyens qui actionnent les moyens d'interruption en réponse à l'actionnement du clavier. 20 Un système d'ordinateur selon la revendication 19, ca- ractérisé en ce que l'éditeur comporte des moyens pour com- mander l'importance de la partie du code d'origine traitée par le compilateur. 21 Un système d'ordinateur selon la revendication 20, ca- ractérisé en ce que l'éditeur comporte des moyens pour com- mander la ré-initialisation du compilateur afin de provoquer la recompilation par ce dernier du code d'origine.