Aller au contenu

Les patterns

Les patterns compilés forment une passerelle entre le langage courant et les expressions régulières, bien plus complexes. Ils sont utilisés pour reconnaître une partie du texte qui est en train d'être lu, dans les expressions, actions ou fonctions.

L'objectif d'un pattern est de reconnaître du texte. La forme du pattern permet de définir quelles suites de caractères on veut pouvoir reconnaître.

Patterns

• Une chaîne vierge sera obligatoire. Par exemple, le pattern cancel event ne reconnaîtra que la chaîne cancel event.

• Une chaîne entre crochets [] sera optionnelle. Par exemple, le pattern [script] file reconnaîtra les chaînes de caractère suivantes :

  • file
  • script file

• Deux chaînes entre parenthèses () séparées par une barre verticale | seront optionnelles, mais au moins l'une d'entre elle sera obligatoire. Par exemple, le pattern random (numbers|integers) reconnaîtra les chaînes de caractères suivantes :

  • random numbers
  • random integers

Tip

Plusieurs chaînes peuvent être ajoutées à la suite en ajoutant une barre verticale | à chaque nouvelle chaîne.

Info

Il est possible de combiner les patterns pour reconnaître des phrases plus complexes. Il est possible d'utiliser des crochets dans les parenthèses, et réciproquement.

Arguments et types

Il est également possible de paramétrer des arguments pour les expressions ou les actions. Il suffit de mettre entre accolades {} le nom du type attendu. Pour indiquer qu'il peut y avoir n'importe quel type, il suffit d'utiliser le type {element}, puisque tous les types héritent du type element.

Tip

Pour les expressions, fonctions et actions, renseigner un type spécifique n'est généralement pas utile lors du runtime, puisque les variables ne sont pas typées. Cependant, cela permet une meilleure compréhension du pattern et des variables attendues (car une erreur sera lancée si un cast vers ce type est impossible) par l'action ou l'expression, ainsi qu'une meilleure génération de la documentation.

Par exemple, le pattern random element of {array} indique qu'un tableau est attendu après une chaîne de caractère égale à random element of. Si l'expression passée n'est pas un tableau, une erreur sera levée lors du runtime.

Enfin pour les expressions et les fonctions, il est possible d'indiquer leur type de retour. Il suffit pour cela de rajouter le nom du type à la fin de la chaîne, après deux points :. Ainsi, le pattern size of {array}:number indique qu'un nombre est renvoyé par ce pattern de l'expression ou de la fonction.

Marques (marks)

Pour paramétrer davantage le comportement d'un pattern, on peut utiliser les marks. Ainsi, le pattern suivant :((1;left hand)|(2;right hand)) permettra grâce aux nombres placés avant le point-virgule ; de savoir si une partie du pattern a été vérifiée lors de la lecture.

Tip

Une marque est donc nécessairement être optionnelle, dans le sens où cela n'aurait pas de sens de vérifier si une phrase obligatoire a oui ou non été vérifiée.

Danger

Les parties à tester doivent être entre parenthèses, le pattern (1;left hand|2;right hand) sera mal interprété et des erreurs pourront être levées lors de l'interprétation du script.

Les valeurs des marks (true ou false, et plus exactement 1 ou 0) peuvent être récupérées grâce à l'entier getMarks() pour les actions, les évènements et les expressions. Il faut ensuite regarder si le nième bit de l'entier est à 0 ou 1. Dans notre exemple, pour savoir si l'utilisateur s'intéresse à la main gauche (left hand), notre condition doit être ((marks >> 0) & 1) == 1. L'indice de la première marque doit être 1.

Le nombre maximal de marques pouvant être utilisé est donc de 32, les entiers en Java étant codés sur 32 bits.

Retour en haut de la page