Principes de la syntaxe

images/whitebelt.png

Le compilateur analyse le code source et tente de réperer des éléments unitaires (des léxèmes): "mots" (noms, mots-clef), des valeurs littérales ( 3.45 "une chaîne",..), des opérateurs (/ &&,…), des éléments de structure ({ ; ,…).

donc:

   int x=y+z ;
   int ix = iy + iz ; // équivalent: plus facile à lire

Il tente ensuite de construire une structure cohérente conforme aux spécifications du langage (quand il échoue à ce stade les messages du compilateur sont souvent obscurs!).

Une fois que la structuration est acquise le compilateur va vérifier si les types sont utilisés correctement. Par exemple si le type java.math.BigDecimal (ou tout autre type) est utilisé il va vérifier si les constructeurs, méthodes et autres caractéristiques du type sont correctement utilisées (le code respecte-t’il les "signatures" de ces constructeurs, méthodes, etc…).

Pour pouvoir faire ces vérifications le compilateur lit le code binaire de ces classes. Les fichiers ".class" contiennent toutes les informations sur les caractéristiques du type correspondant.

Ces fichiers ".class" doivent être accessibles depuis le CLASSPATH du compilateur: c’est une liste de répertoires ou d’archives jar qui contiennent ces fichiers.

Une commande de compilation peut donc ressembler à ceci (sous UNIX) :

javac --class-path $HOME/java/monProjet/build/classes:$HOME/java/libs/unelib.jar MaClasse.java

Nous reviendrons sur ce point ultérieurement (en particulier en introduisant les modules)….