Haut de page
Syntaxe des modules Lexer
Préambule
Les modules de l'analyseur lexical contiennent :
- des automates finis déterministes
- des règles d'analyse (liste d'automates à tester)
- les noms des classes css à associer au token
- des noms de token destinés à renommer certains token
- des noms de token devant précéder certain token pour qu'il soit véritablement reconnu
Lors de la création de module pour le lexer
- les résultats sont stockés jusqu'au rechargement de la page.
- Ils sont utilisables pour le calcul des modules suivants.
Syntaxe
Les modules requis
Ils ne seront pas calculés automatiquement. Cela permet aux ordinateurs de refroidir un peu...
La notation ci-dessous est utilisée uniquement pour connaître les modules qu'il nous faut avant de lancer le calcul.
- leur déclaration se fait en tête de fichier
- le symbole '¤' préfixe les modules requis
- ils sont séparés avec le symbole ','
Exemple: ¤ superscript, whitespaces, strings&comments
Les définitions
Nous identifions :
- Les tokens : expression régulière (transformer ultérieurement en AFD)
! REGULAR_EXPRESSION = \/{reBody}\/{reFlags}
- Les règles d'analyse (liste de tokens à tester lors de l'analyse)
!# JS = BIG_JS|NOT_WHITE_SPACES
- Les aggrégations de token : assemblage de plusieurs automates en un seul
!@ INI_VALUE = S_INI_SDQ|S_INI_SSQ|INI_VALUE_IN|{hspaces}
- Les macros :
- Expression régulière intégrée dans d'autres.
- Liste de noms de token (portion d'une aggrégation, d'une règle d'analyse ou de l'attribut previousTokens).
Elles sont intégrées dans les valeurs en étant encadrées par les symboles '{}'
Export du résultat
Pour que les tokens, les règles et les aggrégations soit dans le résultat, il faut que leur identifant soit précédé du caractère '!'.
Notation identifiants
- ceux commençant par une lettre majuscule sont :
- Les noms des tokens
- Les règles d'analyse : Ils doivent-être aussi précédés du caractère '#'
- Les aggrégations de token : Ils doivent-être aussi précédés du caractère '@'
- ceux commençant par une lettre minuscule sont les macros.
Préfixes d'identifiants
- 'S_TokenName' :
- Détecte le début d'un token parent
- créé le token parent 'TokenName'
- ajoute le token 'S_TokenName' au parent
- continue l'analyse avec la définition 'TokenName'
- l'analyse du parent se stoppe si aucun token est trouvé ou si le token 'E_TokenName' est trouvé.
- 'E_TokenName' :
- Détecte la fin d'un token parent
- 'L_TokenName' :
- Indique au lexer qu'il faut incrémenter de 1 la valeur de la ligne courante.
- 'R_TokenName' :
- Ce type de token permet de faire un double scannage.
- Si le token 'TokenName' est trouvé,
- le token parent 'TokenName' est créé
- l'analyse lexicale est relancée avec la définition 'TokenName' sur la valeur précédemment trouvé
- Ce type de token est à éviter si possible.
Affectation de valeur
Les valeurs commencent après l'identifiant suite aux espaces après le symbole '=' et se termine au saut de ligne.
Affectation d'attributs
Les attributs sont définis entre des parenthèses '()' et sont séparés par une virgule ',' à la suite de l''affectation.
Nom d'attributs implémentés :
- css : classe css.
- previousTokens : Liste des tokens pouvant le précéder, séparés par le symbole '|'.
- translation : nom final du token.
La valeur de ces attributs est présente après le caractère ':' suivant le nom.
Les aggrégations ne possèdent pas d'attribut puisqu'elles ne sont pas un token.
Les commentaires
Il est possible d'ajouter des commentaires, mais ils doivent être seules sur les lignes où ils sont ajoutés.
- Commentaire simple ligne
// ...
- Commentaire multiligne
/* ... */
Exemple
Je vous propose de :