Question

Je suis en train de faire un analyseur Bison pour gérer UTF-8. Je ne veux pas l'analyseur pour interpréter réellement les valeurs de caractères Unicode, mais je veux d'analyser la chaîne UTF-8 comme une séquence d'octets.

En ce moment, Bison génère le code suivant qui est problématique:

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }

Le problème est que le nombre d'octets de la chaîne UTF-8 aura une valeur négative, et les valeurs négatives Bison interprète comme un EOF, et des arrêts.

Y at-il un moyen de contourner cela?

Était-ce utile?

La solution

bison oui, flex non. La seule fois où je besoin d'un analyseur de bison pour travailler avec des fichiers codés en UTF-8 je fini par écrire ma propre fonction yylex.

modifier : Pour vous aider, je beaucoup des opérations Unicode disponibles dans glib (il y a un type de gunicode et certaines fonctions de manipulation de fichiers / chaîne que je trouve utile).

Autres conseils

flex étant la question ici, vous voudrez peut-être jeter un oeil à zlex .

Ceci est une question il y a 4 ans, mais je suis face aux mêmes questions et je voudrais partager mes idées.

Le problème est que dans UTF-8 vous ne savez pas combien d'octets à lire. Comme indiqué plus haut, vous pouvez utiliser votre propre lexer, et l'ont soit lu des lignes entières, ou l'ont lu 4 octets à chaque fois. extraire ensuite le caractère UTF-8 de cela, et lire plus d'octets pour compléter à nouveau à 4 octets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top