XL (langage) - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Syntaxe

La syntaxe est définie au niveau XL0. La phase XL0 du compilateur peut être configurée en utilisant un fichier de description de la syntaxe, où sont définies des propriétés telles que la représentation du texte et les priorités des opérateurs. Un fichier de syntaxe basique définit les notations mathématiques communes tel que + pour l'addition, ainsi que la priorité des opérations.

L'arbre syntaxique est composé de 7 types de nœuds : 4 types de feuilles (entier, réel, texte et symbole) et 3 types de nœuds internes (infixe, préfixe et bloc).

  • un nœud entier est la représentation littérale d'un entier, comme 2. Le signe # peut indiquer une base différente de 10, par exemple (2#1001). Un caractère souligné (ou underscore) comme séparateur peut aider la lecture, par exemple 1_000_000.
  • un nœud réel représente un nombre non entier, comme 2.5. Les notations de base et les séparateurs peuvent être utilisés de la même façon pour les entiers, par exemple 16#F.FFF#E-10 est une représentation littérale valide d'un réel.
  • un nœud texte représente un contenu textuel. Il est classiquement entouré par un guillemet simple ou double, comme "Salut" ou 'a', mais le fichier syntaxique peut être utilisé pour ajouter d'autres séparateurs, dont ceux dédiés aux textes à lignes multiples.
  • un nœud symbole représente un nom ou un opérateur. Un nom est un séquence de caractères alpha-numériques commençant par une lettre, par exemple Salut. XL0 préserve la casse, mais XL1 ignore la casse et le caractère souligné ce qui fait que MonsieurDupont et Monsieur_Dupont sont le même nom. Un symbole est une séquence de caractères non alpha-numériques, par exemple * ou =/=.
  • un nœud infixe représente deux nœuds liés par une notation infixée, par exemple A+1 ou 2 and 3. En particulier, un nœud infixe combiné à un infixe "nouvelle-ligne" permet de séparer deux lignes.
  • un nœud préfixe représente deux nœuds consécutifs, par exemple Write "Salut". Ceci est aussi utilisé dans le notation postfixe, par exemple 3! ou Open?.
  • un nœud bloc représente un nœud entouré par des symboles isolants, par exemple (A) ou [Index]. Une indentation est représentée en interne par un nœud bloc.

Avec le fichier de syntaxe par défaut, le code suivant est valide pour XL0, indépendamment de la sémantique :

      A = B + "Salut"      

Il est décomposé en :

      infix("=",            symbol("A"),            infix("+",                  symbol("B"), text("Salut")))      

État du développement et historique

Le design de XL a commencé aux alentours de 1992, sous le nom LX (Langage eXpérimental). Le projet a été mis dans le domaine du logiciel libre en 2000, dans le cadre du projet "Mozart" qui visait à fournir des capacité de métaprogrammation multi-langage. Les premiers compilateurs étaient écrits en C++, mais cela rendait l'écriture d'extensions de compilateurs compliquée, car C++ ne permettait pas d'offrir le niveau d'abstraction voulu (par exemple un équivalent de translate). Les aspects multi-langage rendaient les arbres syntaxiques difficile à manipuler en respectant la sémantique de chaque langage.

Une réécriture complète du compilateur a commencé en 2003, abandonnant l'idée de support multi-langage qui avait montré ses limites, et focalisant sur la facilité d'écriture des extensions. L'arbre syntaxique abstrait a été réduit à sept types de nœud seulement pour représenter tous les programmes. Ce nouveau compilateur s'est auto-compilé en 2004 (bien qu'avec des capacités réduites et une dépendance à C++ dans le code généré). Depuis, tout le développement se fait en XL.

En 2007, le langage offre un grand nombre de fonctionnalités avancées, mais manque encore d'une librairie fonctionnelle.

Prédécesseurs

XL a été inspiré par un grand nombre d'autres langages. Dans l'ordre alphabétique :

  • Ada a inspiré quelques fonctionnements appliqués sur la totalité d'un programme, comme la gestion d'exception, les tâches, la portabilité.
  • Basic, principalement dans les versions modernes qui s'affranchissent des numéros de lignes et permettent la programmation structurée, a montré combien un langage de programmation peut être simple. Basic est un des premiers langages modernes ne nécessitant pas la présence de parenthèse autour des appels de routine.
  • C a servi comme standard pour l'exécution (runtime) et le niveau machine. XL ne tourne pas sur une machine virtuelle.
  • C++ par ses bibliothèques de modèles standards a montré le besoin d'une bonne implémentation des types génériques, incluant implicitement les instanciations des génériques (ce qui fait défaut à Ada).
  • Fortran poursuit et dépasse les performances de C et C++ sur les applications de calcul intensif, aidant l'identification des constructions de langage qui préviendrait des optimisations utiles.
  • Java démontre l'importance d'un système de bibliothèques portables. Les conteneurs Java montrent aussi les limitations d'une approche non basée sur une programmation générique. L'interfaçage avec le code Java reste un défi intéressant pour XL.
  • L'extensibilité de Lisp a été vue comme un facteur clé de sa survie et de son intérêt jusqu'à aujourd'hui. Lisp a été le premier langage à introduire les fonctionnalités de l'orienté objet, même s'il a été conçu des années avant que la programmation orientée objet ne soit inventée.
  • Prolog a démontré que les paradigmes de programmation alternatifs sont parfois utiles et hautement productifs. Tout a été fait pour s'assurer qu'un plugin dans le style de Prolog puisse être écrit pour XL.
  • Visual Basic a montré comment la représentation de l'arbre d'analyse peut être séparée de sa présentation visuelle. Peu de gens éditent des formulaires VB sous forme textuelle. On peut espérer que les plugins d'édition XL fourniront un jour des fonctionnalités similaires, en manipulant directement l'arbre d'analyse.
Page générée en 0.090 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise