Je voudrais créer simple analyseur xml en utilisant bison/flex. Je n'ai pas besoin de validation, commentaires, arguments, seulement <tag>value</tag>
, où valeur peut être nombre, chaîne ou autre <tag>value</tag>
.Analyseur XML simple dans bison/flex
Ainsi, par exemple:
<div>
<mul>
<num>20</num>
<add>
<num>1</num>
<num>5</num>
</add>
</mul>
<id>test</id>
</div>
Si elle aide, je connais les noms de tous les tags qui peuvent se produire. Je sais combien de sous-étiquettes peuvent être conservées par une étiquette donnée. Est-il possible de créer analyseur de bison qui ferait quelque chose comme ça:
- new Tag("num", 1) // tag1
- new Tag("num", 5) // tag2
- new Tag("add", tag1, tag2) // tag3
- new Tag("num", 20) // tag4
- new Tag("mul", tag4, tag3)
...
- root = top_tag
Tag & nombre de sous-tags:
- num: 1 (seule valeur)
- str: 1 (seulement valeur)
- ajouter | sub | mul | div: 2 (num | str | tag, num | str | tag)
Pourriez-vous m'aider avec la grammaire à créer AST comme indiqué ci-dessus?
Est-il important d'utiliser un sous-ensemble de XML pour cela?Si votre langage consiste simplement en expressions arithmétiques, je vous conseille de chercher plutôt à analyser les expressions infixes, ce qui vous permettra d'utiliser des chaînes comme '(20 * (1 + 5))/test'. À moins que cela ne soit nécessaire pour une autre raison, XML semble un peu exagéré, surtout si vous écrivez l'analyseur! – shambulator
Les données sont conservées en XML, donc je n'ai pas le choix. – user360872
Toutes mes excuses pour la réponse tardive; Êtes-vous plus proche d'une solution pour cela? Étant donné que vous devez utiliser XML, pourquoi ne pas utiliser une bibliothèque déjà écrite? Avez-vous le choix du langage de programmation? Ou est le but de l'exercice pour écrire un analyseur? Et si oui, devez-vous utiliser un générateur d'analyseur? Pour une grammaire relativement simple comme celle-ci, vous pouvez facilement écrire un analyseur récursif-descendant. – shambulator