Question

Je prévois faire un utilitaire de transformation de script (pour des informations de diagnostic étendu) en utilisant Boost.Spirit 2.

Bien qu'il y ait un soutien pour etc. d'information en ligne pour erreurs d'analyse syntaxique, comment je peux stocker les numéros de ligne pour les expressions avec succès Qi analysables?

Était-ce utile?

La solution

Selon la liste de diffusion, Spirit.Classic noreferrer itérateurs de position peut également être utilisé avec Spirit 2 .
Il y a aussi un article sur un iter_pos-analyseur sur Esprit -Blog.

Je mettrai à jour quand j'eu le temps de tester.

Autres conseils

Je me rends compte que je remarquai la question en retard, mais permettez-moi d'ajouter ceci de toute façon. J'ai écrit un échantillon d'un analyseur de fichier INI dans une autre réponse:

Il utilise une action sémantique 'simple' avec line_pos_iterator.

Voici le fruit de mon travail: https://gist.github.com/1425972

  • Lorsque POSITIONINFO == 0
    • entrée est en streaming
    • sortie est cordes brutes (bien, pour les sections map<string, map<string, string> >)
  • Quand POSITIONINFO == 1

    • entrée est tamponnée
    • sortie est textnode_t:

      struct textnode_t {
          int sline, eline, scol, ecol;
          string_t text;
      };
      

      Cela signifie que le map<textnode_t, map<textnode_t, textnode_t> > résultant est capable de rapporter exactement ce que (ligne, colonne) points de début et de fin marquent les nœuds de texte individuels.

Voici une démo réduite. Pour une description complète et vaste des cas de test voir Anser originale ou le code github

Démo entrée

[Cat1]
name1=100 #skipped

name2=200 \#not \\skipped
name3=   dhfj dhjgfd

Demo sortie (POSITIONINFO == 0)

Parse success!
[Cat1]
name1 = 100 
name2 = 200 \#not \\skipped
name3 = dhfj dhjgfd

Sortie de démonstration (POSITIONINFO == 1)

Parse success!
[[L:1,C2 .. L1,C6:Cat1]]
[L:2,C2 .. L2,C7:name1] = [L:2,C8 .. L2,C12:100 ]
[L:6,C2 .. L6,C7:name2] = [L:6,C8 .. L6,C27:200 \#not \\skipped]
[L:7,C2 .. L7,C7:name3] = [L:7,C11 .. L7,C22:dhfj dhjgfd]

est un autre article utile qui explique comment utiliser l'exception que la fonction phrase_parse jette.

L'article décrit comment obtenir des messages d'erreur comme ceci:

Exception: parse error at file STDIN line 1 column 10
'123,42.0,a,1.4'
          ^- here
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top