Noms de jetons
Avec yytname visible, il est facile d'extraire les jetons dans un format reconnaissable par le package gettext. Par exemple, vous pouvez ajouter à votre.

Probablement le moyen le plus simple est d'insérer les traductions directement dans yytname en itérant à travers ce tableau et en substituant chaque nom de jeton à sa traduction cela devrait être fait au démarrage de l'analyseur.
Cela présente l'ennui que yytname noms de jetons déclaré const par le squelette de bison; cependant, une invocation sed ou awk très simple peut être utilisée pour supprimer le code const incriminé.

Cela dit, il n'est pas du tout évident pour moi que ces messages d'erreur générés automatiquement soient "conviviaux", à moins que l'utilisateur ne soit familier avec la grammaire formelle du langage. Et un utilisateur qui est familier avec la grammaire pourrait bien préférer le nom de jeton original, afin de le trouver dans la grammaire, plutôt que d'une traduction non-expert qui ne ressemble que par coïncidence au concept original.

Pas que je pointe du doigt quelqu'un en particulier. Vous pouvez profiter de ce fascinating essay noms de jetons Russ Cox, sur la façon dont il a implémenté des messages d'erreur réellement conviviaux pour Go.
Ceux-ci n'apparaissent pas très souvent dans les grammaires; Si vous remplacez votre scanner par des mots-clés internationalisés, il est très peu probable que vous utilisiez la fonction de chaîne de caractères citée de Bison.

En fait, il serait préférable d'utiliser plusieurs strophes, mais celle-ci est suffisante pour vous aider, je pense. Vous voulez probablement marquer tout ou partie des résultats intermédiaires comme.

D'un autre côté, il vérifie que les chaînes sont compilables. Voir le gc de Meilleures applications éprouvées pour gagner Cox lien fourni ci-dessus pour un exemple.
Son Makefile modifie la sortie de bison pour supprimer le const de yytname, de sorte que l'analyseur généré peut substituer ses noms de jeton préférés pour les messages d'erreur, de sorte que vous pouvez voir l'idée générale au travail.
