Étant donné une grammaire forte> ll (1) forte> 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 strong> p> 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. P> 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. p> Je suis vraiment nouveau dans ce genre de choses alors n'ayez pas peur de m'appeler un Dimwit. P> p>
3 Réponses :
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. P>
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> *Main> parseExpr "(5*3)+1"
Right (Add (Mul (I 5) (I 3)) (I 1))
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 code> un type code>. 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.) I> 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.
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.