Définitions

Avant d’utiliser des éléments de données dans un programme de langage utilisateur, vous devez les définir. Il existe trois types de définitions :

La définition d’une constante ou d’une variable s’applique depuis la ligne dans laquelle elle s’affiche jusqu’à la fin du bloc en cours ou, si la définition s’affiche en dehors de tout bloc, jusqu’à la fin du programme de langage utilisateur.

La définition d’une fonction s’applique depuis l’accolade de fin (}) du corps de la fonction jusqu’à la fin du programme de langage utilisateur.

Définitions de constantes

Les constantes sont définies à l’aide du mot-clé enum, comme dans l’exemple suivant :

enum { a, b, c };

qui définit les trois constantes a, b et c, en leur attribuant les valeurs 0, 1 et 2, respectivement.

Les constantes peuvent également être initialisées sur des valeurs spécifiques, comme dans l’exemple suivant :

enum { a, b = 5, c };

qui définit a sur 0, b sur 5 et c sur 6.

Définitions de variables

La syntaxe générale de la définition d’une variable est la suivante :

[numeric] type identifier [= initializer][, ...];

où type est l’un des types de données ou d’objets, identifier est le nom de la variable et initializer est une valeur initiale facultative.

Les définitions de plusieurs variables du même type sont séparées par des virgules (,).

Si l’identificateur est suivi d’une paire de crochets ([ ]), alors il s’agit d’un tableau de variables du type spécifié. La taille d’un tableau est automatiquement ajustée au moment de l’exécution.

Vous pouvez utiliser le mot-clé facultatif numeric avec les tableaux de chaînes pour les trier par ordre alphanumérique à l’aide de la fonction sort().

Par défaut (si aucune valeur initiale n’est spécifiée), les variables de données sont définies sur 0 (ou « », dans le cas d’une chaîne) et les variables d’objet sont « incorrectes ».

Exemples

int i; définit une variable de type entier appelée i
string s = "Hello"; définit une variable de type chaîne appelée s et l’initialise sur « Hello »
real a, b = 1.0, c; définit trois variables de type réel appelées a, b et c, et initialise b sur la valeur 1.0
int n[] = { 1, 2, 3 }; définit un tableau d’entiers et initialise les trois premiers éléments sur 1, 2 et 3
numeric string names[]; définit un tableau de chaînes qui peut être trié par ordre alphanumérique
UL_WIRE w; définit un objet UL_WIRE appelé « w »
Les membres des éléments de tableau de type objet ne sont pas accessibles directement :
UL_SIGNAL signals[];
...
UL_SIGNAL s = signals[0];
printf("%s", s.name);

Définitions de fonctions

Vous pouvez écrire vos propres fonctions de langage utilisateur, puis les appeler comme les fonctions intégrées. La syntaxe générale de la définition d’une fonction est la suivante :

type identifier(parameters)
{
  statements
}

où type est l’un des types de données ou d’objets, identifier est le nom de la fonction, parameters est une liste de définitions de paramètres séparées par des virgules et statements est une séquence d’instructions. Les fonctions qui ne renvoient aucune valeur sont de type vide.

Toute fonction doit être définie avant d’être appelée, et les appels de fonction ne peuvent pas être récursifs (autrement dit, une fonction ne peut pas s’appeler elle-même).

Les instructions spécifiées dans le corps d’une fonction peuvent modifier les valeurs des paramètres, mais elles n’ont aucun effet sur les arguments de l’appel de fonction.

L’exécution d’une fonction peut être interrompue par l’instruction return. En l’absence d’instruction return, le corps de la fonction s’exécute jusqu’à atteindre l’accolade de fin (}).

Un appel à la fonction exit() interrompt le programme de langage utilisateur.

Fonction spéciale main()

Si votre programme de langage utilisateur contient une fonction appelée main(), celle-ci sera appelée explicitement comme fonction principale, et la valeur de retour du programme sera la valeur renvoyée par cette fonction.

Les arguments de ligne de commande sont disponibles pour le programme via les variables globales intégrées argc et argv.

Exemple
int CountDots(string s)
{
  int dots = 0;
  for (int i = 0; s[i]; ++i)
      if (s[i] == '.')
         ++dots;
  return dots;
}
string dotted = "This.has.dots...";
output("test") {
  printf("Number of dots: %d\n",
                 CountDots(dotted));
  }