J'essaye de comprendre comment analyser une chaîne dans ce format dans une arborescence comme la structure de données de profondeur arbitraire.Parse chaîne dans une structure d'arbre?
"{{Hello big|Hi|Hey} {world|earth}|{Goodbye|farewell} {planet|rock|globe{.|!}}}"
[[["Hello big" "Hi" "Hey"]
["world" "earth"]]
[["Goodbye" "farewell"]
["planet" "rock" "globe" ["."
"!"]]]]
J'ai essayé de jouer avec des expressions régulières pour cela (tels que # « {([^ {}] *)} »), mais tout ce que j'ai essayé semble « aplatir » l'arbre dans une grande liste de listes. Je pourrais aborder cela sous le mauvais angle, ou peut-être une regex n'est tout simplement pas le bon outil pour le travail.
Merci pour votre aide! Ne pas utiliser d'expressions régulières pour cette tâche.
Donc, après avoir cette grammaire, il est nécessaire d'utiliser un générateur de parser pour générer un analyseur basé sur cette grammaire, n'est-ce pas? En outre, l'analyseur devrait être alimenté avec une phrase et ensuite l'arbre pourrait être cédé, non? – bikashg
@Bikash - Oui et Non. Vous * pouvez * utiliser un générateur d'analyseur (comme yacc ou bison) si vous le souhaitez, ou vous pouvez écrire votre propre analyseur de descente récursive (c'est remarquablement simple). Si vous utilisez yacc ou bison, vous devez écrire des actions qui vont réellement construire l'arbre. Je ne pense pas que Yacc/Bison vous donne l'arbre par lui-même. Ils reconnaissent simplement la grammaire. –