7
votes

Qu'est-ce qu'une structure de données appropriée ou un algorithme de production d'un arbre de syntaxe de béton immuable de manière fonctionnelle?

Étant donné une grammaire ll (1) Quelle est une structure de données appropriée ou un algorithme de production d'un arbre de syntaxe de béton immuable de manière fonctionnellement pure? S'il vous plaît n'hésitez pas à écrire d'exemple code dans n'importe quelle langue que vous préférez.

mon idée xxx

Voici une idée que je pensais. Le problème principal ici est la gestion des erreurs de syntaxe. Je veux dire que je pourrais m'arrêter à la première erreur, mais cela ne semble pas raison. xxx

Veuillez noter

je vais Offrez une belle prime à la meilleure réponse alors ne vous sentez pas pressée. Réponses que simplement publier un lien aura moins de poids sur des réponses qui affichent le code ou contiennent des explications détaillées.

Note finale

Je suis vraiment nouveau dans ce genre de choses alors n'ayez pas peur de m'appeler un Dimwit.


4 commentaires

Quel est le problème avec les arbres composés bas up?


@Ira - Vous me dites, je suis nouveau à tout cela.


Puisque deviner les connaissances précédentes est difficile, vous voudrez peut-être commenter des réponses et demander des éclaircissements.


@Heinrich - Je planifie dessus, il suffit de faire du temps pour traiter les informations.


3 Réponses :


0
votes

Eric Lippert ''s La série de blogs sur des arbres binaires immuables peut être utile. De toute évidence, vous avez besoin d'un arbre qui n'est pas binaire, mais cela vous donnera l'idée générale.


0 commentaires

10
votes

Vous voulez Parse em> quelque chose dans un arbre de syntaxe abstraite.

Dans le langage de programmation purement fonctionnel Haskell, vous pouvez utiliser combinaisons d'analyseurs em> pour exprimer votre grammaire. Voici un exemple qui analyse une minuscule langue d'expression: p>

Modifier strong> Utilisez le style monadique pour correspondre au livre de Graham Hutton P>

*Main> parseExpr "(5*3)+1"
Right (Add (Mul (I 5) (I 3)) (I 1))


7 commentaires

Je dois admettre que ceci est difficile pour moi de comprendre. Dans mon esprit, j'imagine que j'imagine une machine d'état qui passe en continu, mais cela prendra certainement du temps pour que je puisse comprendre cela.


La clé à propos d'ici est que vous n'avez pas besoin de mettre en œuvre une machine d'état ou quelque chose que vous avez déjà fait pour vous dans la bibliothèque de combinaisons d'analyseurs et des jetons d'analyseur un type . Vous pouvez simplement spécifier la grammaire de manière abstraite et laisser la bibliothèque à comprendre quoi faire avec elle.


@Heinrich - Il y a deux façons de comprendre un sujet (grammaires / peser / compilateur dans ce cas). Le premier moyen est de simplement être assez intelligent pour le comprendre avec peu d'effort (c'est ainsi que j'ai travaillé avant que j'ai décidé d'apprendre l'informatique avancée.). Une fois que j'ai découvert, je ne suis pas si intelligent, j'ai décidé que la seule façon dont je pourrai apprendre cela passe par la deuxième méthode. La deuxième méthode est une simple dédicace. Depuis lors, j'ai écrit 4 analyseurs ECMAScript, chacun devenant progressivement mieux que j'ai appris de nouvelles techniques. Cependant, ils ont tous été impératifs.


@Heinrich - Si je peux terminer un analyseur purement pur du début à la fin, je vais examiner cela comme le Capstone de mon expérience d'apprentissage. Après cela, je commencerai une étude détaillée des outils et des bibliothèques à la disposition de moi. Si je saute directement dans des bibliothèques, je me sens comme si je me trompe moi-même.


Votre dévouement exceptionnel à l'apprentissage est mieux complétée par un bon livre. :-) Dans votre cas, je vous recommande vivement de recevoir le livre de Graham Hutton, peut-être d'une bibliothèque ou par voie électronique. Il introduit des types d'arbres généraux à Haskell et présente également une explication très claire des combinaisons d'analyseurs et leur mise en œuvre. Il existe également des conférences vidéo sur le livre, consultez également son site Web. Je changerai mon code (j'utilise une "complication" supplémentaire) pour correspondre au style du livre.


Homme j'espérais quelques réponses de plus, mais on dirait que vous êtes le gagnant. (Vous m'avez convaincu d'apprendre Haskell alors cela a du sens.) Avez-vous regardé l'IDE Leksah? Ce n'est que la version 0.8 mais je l'aime vraiment.


Merci. :-) Au fait, les listes de diffusion Haskell-cafe@hakell.org et débutants@hakell.org ainsi que le canal de #hakell IRC sont d'excellentes ressources pour apprendre Haskell, n'hésitez pas à poser des questions là-bas. Concernant Lekash, je ne l'ai pas utilisé en raison de problèmes de compilation avec GTK + sur MacOS X. La plupart des gens, y compris de moi, utilisent un éditeur de texte standard pour Haskell; fonctionne comme un charme pour moi.



2
votes

Consultez définitivement l'approche de combinaisons d'analyseurs monadiques; J'ai blogué à propos de en C # et en F # .


0 commentaires