Utilisation du fichier de grammaire yacc
Un fichier de grammaire yacc comprend les sections suivantes:
- Déclarations
- règles
- Programmes
declarations
%%
rules
%%
programs%%
rulesLa commande yacc ignore les blancs, les tabulations et les caractères de nouvelle ligne dans le fichier de grammaire. Par conséquent, utilisez ces caractères pour faciliter la lecture du fichier de grammaire. Toutefois, n'utilisez pas de blancs, de tabulations ou de caractères de nouvelle ligne dans les noms ou les symboles réservés.
Utilisation des commentaires
Pour expliquer ce que fait le programme, placez des commentaires dans le fichier de grammaire. Vous pouvez placer des commentaires n'importe où dans le fichier de grammaire que vous pouvez nommer. Cependant, pour faciliter la lecture du fichier, placez les commentaires sur les lignes par eux-mêmes au début des blocs fonctionnels de règles. Un commentaire dans un fichier de grammaire yacc ressemble à un commentaire dans un programme en langage C. Le commentaire est placé entre/*(barre oblique inversée, astérisque) et*/(astérisque, barre oblique inversée). Par exemple :
/* This is a comment on a line by itself. */Utilisation de chaînes littérales
Une chaîne littérale contient un ou plusieurs caractères''(guillemets simples). Comme dans la langue C, le\(barre oblique inversée) est un caractère d'échappement dans les littéraux, et tous les codes d'échappement du langage C sont reconnus. Ainsi, la commande yacc accepte les symboles du tableau suivant:
| Symbole | Définition |
|---|---|
| '\a' | Alerte |
| '\B' | Retour arrière |
| '\F' | saut de page |
| '\n' | Nouvelle ligne |
| '\R' | Renvoyer |
| '\t' | Onglet |
| '\v' | Onglet vertical |
| '\'' | Guillemet simple (') |
| '\"' | Guillemet (") |
| '\?' | Point d'interrogation (?) |
| '\\' | Barre oblique inversée (\) |
| '\Chiffres' | Caractère dont le codage est représenté par l'entier octal à un, deux ou trois chiffres spécifié par la chaîne Digits . |
| '\xChiffre' | Caractère dont le codage est représenté par la séquence de caractères hexadécimaux spécifiée par la chaîne Digits . |
Etant donné que son code ASCII est zéro, le caractère null (\0 ou 0) ne doit pas être utilisé dans les règles grammaticales. La sous-routine yylex renvoie 0 si le caractère null est utilisé, ce qui signifie la fin de l'entrée.
Formatage du fichier de grammaire
- Utilisez des lettres majuscules pour les noms de jeton et des lettres minuscules pour les noms de symbole non-terminal.
- Placez les règles grammaticales et les actions sur des lignes distinctes pour permettre de changer l'une ou l'autre sans changer l'autre.
- Mettez toutes les règles avec le même côté gauche ensemble. Entrez une fois le côté gauche et utilisez la barre verticale pour commencer le reste des règles pour ce côté gauche.
- Pour chaque ensemble de règles ayant le même côté gauche, entrez le point-virgule une fois sur une ligne en suivant la dernière règle pour ce côté gauche. Vous pouvez ensuite ajouter de nouvelles règles facilement.
- Mettez en retrait les corps de règle par deux tabulations et les corps d'action par trois tabulations.
Erreurs dans le fichier de grammaire
La commande yacc ne peut pas générer d'analyseur syntaxique pour tous les ensembles de spécifications grammaticales. Si les règles grammaticales se contredisent ou nécessitent des techniques de correspondance différentes de celles fournies par la commande yacc , la commande yacc ne génère pas d'analyseur syntaxique. Dans la plupart des cas, la commande yacc fournit des messages pour indiquer les erreurs. Pour corriger ces erreurs, revoyez les règles du fichier de grammaire ou fournissez un analyseur lexical (programme d'entrée à l'analyseur syntaxique) pour reconnaître les modèles que la commande yacc ne peut pas utiliser.