BCJ -1- Présentation

Cette série d’articles est en construction, tous les codes sources sont disponibles sur github

Le langage Basilic est un langage procédural visant à offrir une syntaxe simple analogue à celle du langage Basic, mais permettant d’exploiter toutes les ressources disponibles dans le langage Java. Basilic est implanté comme un langage de script. Un « compilateur » traduit le code basilic en code java.

Exemple:

helloworld.bcj

TypeScript

helloworld.java : code java produit par le « compilateur »

Java

Basilic est un langage très fortement typé. Aucune conversion implicite n’est autorisée.

Basilic est modulaire. Une unité de compilation (fichier source) correspond à une classe Java. Il n’y a pas de type primitif tel que char, int ,…

Il suffit de définir pour chaque type primitif un module réalisant l’implémentation correspondante.

La version minimale de Basilic est fournie avec les modules (classes) suivants:

boolean, int, string, double, long, byte, system, console, stringvector, conversions, lexical, datetime, filedirectory, inifile, arraytools, stringhashmap, stringstack et zip

Ces modules permettent notamment de modifier et de recompiler le compilateur Basilic si l’on souhaite y apporter des modifications.

Pourquoi Basilic ?

Aucune raison logique !

Peut-être une référence à la chambre des secrets dans Harry Potter ?

et le langage Python ?

Définitions du langage Basilic

Notations syntaxiques

Les accolades { } permettent de spécifier des choix. Ceux-ci sont séparés par le symbole |

Les mots-clés du langage sont notés en gras

Si un bloc accolade contient «  » cela signifie qu’il est facultatif

Module ( classe)

suite de { déclaration | instruction | code java | "" }

Un module peut donc être vide !

Déclaration

{ déclaration de variable | déclaration de procédure | déclaration de fonction | «  » }

Déclaration de variable

déclareur identificateur suite de , identificateur

Exemples:

int i,n

string[] t1

string[][] t2,t3

Il est possible de définir des variables simples ou des tableaux à une ou deux dimensions. Pour pouvoir être utilisés les tableaux doivent être dimensionnés à l’aide de l’instruction dim

Exemple:

dim t1[50]
n=10
dim t2[n*2][5]
  • La fonction prédéfinie length retourne le nombre d’éléments pour un tableau à une dimension et le nombre de lignes pour un tableau à deux dimensions
  • La fonction prédéfinie collength retourne le nombre de colonnes pour un tableau à deux dimensions

Déclareur

identificateur de type { [] | [][] | "" }

Déclaration de procédure

proc { static  | public | "" } identificateur ( paramètres ) { exception | "" }
   liste de déclarations de variable
   liste d'instructions
end proc

Déclaration de fonction

func { static  | public | "" } déclareur identificateur ( paramètres ) { exception | "" }
   liste de déclarations de variable
   liste d'instructions
end func

Paramètres

{ «  » | déclareur identificateur { , déclareur identificateur | «  » } }

Exemple:

int n , string k , string[] t

Code java

java

suite instructions et/ou de déclarations java

end java

Exemple:

TypeScript

Remarque: la valeur String java du paramètre d se note d.val (voir l’implantation de la classe string)

Instruction

{ «  » | code java | inst. return | inst. affectation | inst.dim | inst appel procedure |

inst. if | inst while | inst. switch | inst. try | inst. for | inst. import | inst heritage interface }

Instruction return

Dans une procédure return

Dans une fonction return expression

Exemple:

TypeScript

Instruction import

Généralement définie au début d’un module, doit être conforme à la syntaxe java

import directive import ;

Exemple

TypeScript

Instruction héritage interface

Doit être écrite au début du module après les instructions import éventuelles

extends identificateur de classe

{ «  » | implements identificateur d’interface suivi de { «  » | , identificateur d’interface } }

Exemple:

TypeScript

Instruction for

for identificateur de type int while expression booléenne

Exemple

TypeScript

Cette instruction initialise i à 0, et tant que l’expression booléenne vaut vrai, exécute la ou les instructions comprises jusqu’au end for, ajoute 1 au compteur i et retourne évaluer la condition.

Instruction try

try
  suite d'instructions
catch
  suite d'instructions
end catch

Exemple

TypeScript

Instruction while

while expression booléenne

suite d’instructions

end while

Exemple

TypeScript

Remarque: la fonction itos permet de convertir un int en string. Cette fonction est disponible dans le package d’installation.

Instruction if

if expression booléenne
   liste d'instructions
{ "" | else liste d'instructions }
end if

Exemple

TypeScript

Instruction switch

switch
   suite de case expression booléenne liste d'instructions
   default liste d'instructions
end switch

Exemple

TypeScript

Remarque, cette instruction est très différente de celles de C et de Java.

Elle correspond à un suite de si sinon si….

Instruction appel de procédure

identificateur de procédure ( suite d’expression )

Le nombre d’expressions doit correspondre au nombre de paramètres. Le type de chaque expression doit être identique au type du paramètre en respectant l’ordre d’écriture.

Exemple

TypeScript

Instruction dim

Pour les tableaux à une dimension

dim identificateur de tableau [ expression1 ]

Pour les tableaux à 2 dimensions

dim identificateur de tableau [ expression1 ] [ expression2 ]

où expression1 et expression2 sont des expressions de type int

Instruction d’affectation

référence = expression

où référence et expression doivent être de même type

Référence

--> id1 -+-------------^--+---------------------------------^-->
         +-> . --> id2 +  +--> [ exp1 ]--+--------------^---+
                                         +--> [ exp2 ] -+

  • id1 et id2 sont des identificateurs de variables,
  • exp1 et exp2 sont des expressions de type int

id2 est un attribut d’objet: variable définie dans le module objet (voir en exemple le fichier cbtextfile.bcj dans le chapitre suivant)

Expression

Syntaxe de style C, Java avec les priorités classiques. Voici par priorité décroissante. Sur une même ligne l’évaluation est faite de gauche à droite

or
and
< <= > >= == !=
+ -
* / %
- unaire
( )

Un exemple complet

TypeScript

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *