Abstrasy
2.0 (beta)

Généralités

Abstrasy utilise une syntaxe générique très simple et uniformisée tout en préservant tout la puissance de son expressivité.


Notation préfixée

La notation préfixée est une forme d’écriture où l'opérateur est toujours placé à gauche des opérandes.

Ainsi par exemple, “ 2 + 2 ” en écriture infixe classique, s'écrit tout simplement “ + 2 2 ” en écriture préfixée.

On peut déjà relever un premier avantage de la notation préfixée par rapport à l'écriture infixe. En effet, contrairement à l'écriture infixe, l'écriture préfixée permet d'introduire un nombre illimité d'opérandes sans nécessiter la réitération de l'opérateur entre chaque opérande. Car, rappelons-le, la notation infixe n'a de sens que pour les opérateurs qui prennent exactement deux opérandes. Cette caractéristique rend la notation préfixée plus concise et plus uniforme que la notation infixe.

Illustrons cela par un exemple très simple.

Comment écrire “ 1 + 2 + 3 + 4 + 5 ” en écriture préfixée ?…

Tout simplement “ + 1 2 3 4 5 ”.

Remarquez que la notation préfixée est effectivement plus courte que la forme infixe.

Mais ce n'est pas tout. Alors que l'écriture infixe correspond uniquement au cas particulier des opérateurs à deux opérandes, la notation préfixée s'applique toujours de la même façon quelque soit le nombre d'opérandes. Cela nous amène à parler d'un autre avantage: l'uniformité expressive.


Uniformité expressive

Grâce à la notation préfixée, Abstrasy peut adopter une forme expressive particulièrement uniformisée.

En effet, comme la notation préfixée permet d'exprimer toute expression quelque soit le nombre de ses opérandes, on peut généraliser en disant qu'une expression a toujours la forme suivante:

(<opérateur> <opérande 1> <opérande 2> …)

Dans cette représentation généralisée, les parenthèses représentent les délimiteurs de l'expression. On remarque aussi que les éléments (opérateur et opérandes) sont simplement séparés par un espace et qu'il peut y avoir un nombre illimité d'opérandes. Bien sûr, il est possible aussi d'avoir une expression où il n'y a que l'opérateur (sans opérande).

En fait, cette généralisation ne s'applique pas seulement aux opérateurs et aux opérandes. Elle s'applique aussi aux fonctions et à leurs arguments, aux instructions et à leurs paramètres, aux commandes, ou encore à tout objet qui peut répondre à un message. Nous obtenons donc cette forme générale d'expression particulièrement uniformisée:

(<Op> [<a1> [<a2>  []]])

Dans cette représentation particulièrement abstraite d'une expression, les parenthèses correspondent ici aux délimiteurs qui indiquent le début et la fin de l'expression, <Op> représente l'élément appelé pour répondre à un message composé des éléments, éventuellement optionnels, qui le suivent dans l'expression (ici représentés par [<a1> [<a2> […]]]).

Il est important de noter que cette abstraction élimine toute distinction de formes expressives entre opérateurs, fonctions, instructions, commandes, et même objets (qui peuvent aussi être appelés comme des fonctions). Cette uniformité expressive constitue une des particularités les plus importantes du langage. On peut d'ailleurs parler de syntaxe générique.

Notez cependant qu'il existe plusieurs types d'expression. Toutefois, toutes les expressions, quelque soit leur type, sont toujours évaluées selon le même principe élémentaire. Nous en parlons dans la rubrique suivante.


Précédence, réduction et ordre d'évaluation

Dans ce schéma, nous avons numéroté l'ordre de l'évaluation de deux expressions imbriquées. Les numéros entourés de jaune correspondent à une lecture, ceux qui sont entourés de vert correspondent à une évaluation et enfin ceux qui sont entourés de magenta, les réductions.

En Abstrasy, l'ordre d'évaluation est toujours le même.

Les éléments d'une expression sont lus et évalués de gauche à droite. Lorsque tous les éléments d'une expression ont été évalués, celle-ci est réduite.

La «réduction» d'une expression est l'opération qui consiste à l'évaluer pour la substituer ensuite par le résultat obtenu (Il s'agit d'une notion inspirée du λ-calcul).

Ainsi, lorsqu'une expression est imbriquée dans une autre expression, cette expression est évaluée, réduite et remplacée par son résultat dans l'expression qui la contient. L'évaluation se poursuit ensuite avec l'élément suivant jusqu'à ce que l'expression résultante puisse être évaluée et réduite à son tour pour en connaître le résultat.

Le processus d'évaluation se termine lorsqu'il n'y a plus d'expression à réduire. A ce moment, on est arrivé au résultat final.

Cette stratégie d'évaluation nous affranchi de toute ambiguïté et des règles implicites impliquées dans l'établissement de la précédence.

Rappelons que la «précédence» est l'établissement préalable des priorités opératoires ainsi que des propriétés d'associativité qui permettent de déterminer l'ordre dans lequel les calculs doivent être effectués dans une expression complexe.

En Abstrasy, la précédence est totalement explicite. Elle est tout simplement définie par l'ordre de réduction des expressions.

Ainsi, l'expression (+ (+ 5 3) 5) sera naturellement réduite en (+ 8 5) pour finir par livrer son résultat final 13.

De même, l'expression (+ 1 (* 5 2) 3) sera évaluée et réduite sans aucune ambiguïté. D'abord en (+ 1 10 3), pour parvenir au résultat final 14.

On se rend plus facilement compte de l'avantage d'une telle expressivité, si on la compare à celle d'autres langages de programmation. En Python par exemple, l'évaluation de 1 + 5 * 2 + 3 donne aussi 14, mais il faut avouer que le point de départ des opérations peut prêter à confusion, car (1 + 5) * (2 + 3) ne donne pas le même résultat que 1 + (5 * 2) + 3. Un telle ambiguïté n'existe pas en Abstrasy. La syntaxe du langage est parfaitement explicite et permet, du même coup, de faire abstraction des règles de précédence au profit de la seule règle généralisée que nous venons de décrire.


Syntaxe générique mais explicite

L'abstraction syntaxique du langage passe par l'utilisation d'une syntaxe générique très simple et uniformisée. Toutefois, cette simplification ne consiste pas à masquer les détails liés à la sémantique que celle-ci soit de nature opérationnelle (qui ce concentre sur la manière dont l'évaluation est réalisée) ou dénotationnelle (qui s'intéresse à l'effet de l'évaluation). Ainsi, bien qu'uniformisée et simple, la syntaxe du langage est très explicite. Elle ne cache rien.

La syntaxe du langage Abstrasy fait apparaître tout, non seulement ce qui doit être évalué mais aussi comment l'évaluer.

Cette caractéristique permet non seulement de créer des programmes lisibles et fiables, mais aussi performants.


refs/syntax/generalites.txt · Dernière modification: 2014/10/21 12:16 (modification externe)

Retour
Table des matires

 

     
Licence Creative Commons
   Get abstrasy at SourceForge.net. Fast, secure and Free Open Source software downloads