Je voudrais créer mon propre langage informatique, à partir du php, c'est-à-dire mes propres fichiers avec leur extension propre (un langage interprété quoi, comme le php lui-même). J'ai déjà posté ailleurs, mais ici ça me paraît plus indiqué.![]()
Je voudrais créer mon propre langage informatique, à partir du php, c'est-à-dire mes propres fichiers avec leur extension propre (un langage interprété quoi, comme le php lui-même). J'ai déjà posté ailleurs, mais ici ça me paraît plus indiqué.![]()
Après avoir beaucoup cherché, j'ai trouvé une solution partielle: j'utilise la commande pour prendre tout le contenu du fichier dans une variable, puis j'explose ma variable EXPLODE pour couper au niveau des ";" (et pour pouvoir les gerer successivement avec EREGI.)
L'ennui c'est que du coup, si il y a un point virgule entre deux "", il coupe mz commande en plein millieux .
Est-ce que vous comprenez mon problême?
Bon, il y a aussi un sous problême: est-ce qu'il est possible de compter le nombre d'élément d'un tableau? (pour compter combien j'ai de morceau avec EXPLODE)?
Tu essaies de faire cela en PHP?![]()
Il te faudrait quelques bases. Meme si ces liens sont plus axes sur les compilateurs que les interpreteurs, la premiere et la troisieme reference de http://www.bourguet.org/v2/compilers peuvent t'aider. De meme que http://compilers.iecc.com/crenshaw. Chose amusante, la deuxieme reference dans ma page concerne un interpreteur mais devrait moins te convenir.
faire un compilateur ou un interpréteur en php est très bizarre... voire suicidaire
pour en avoir déjà fait, je peux te conseiller d'utiliser des outils comme ocamllex/ocamlyacc ou camlp4 pour arriver à un arbre syntaxique... puis de convertir ton arbre syntaxique en arbre sémantique proche d'une sémantique dénotationnelle. ensuite de passer à la sémantique opérationnelle vers une machine virtuelle, ou aller jusqu'à faire le "backend" la projection vers le code machine
mais c'est très compliqué... surtout si tu veux gérer un système de complexe, avoir des structures de données complexes, etc.
C'est très complexe de faire ceci en partant de rien.
Hors php, on utilise souvent les outils yacc/lex ou bison/flex pour réaliser des compilateurs.
Tu as des liens ici :
ftp://ftp-developpez.com/general/cours/PolyCompil.pdf
http://neoflo.free.fr/cours_c/cours-compilation.pdf
C'est pas moi qui dirait le contraire, mais utiliser Camlp4 quand on ne sait même pas ce que c'est qu'un compilateur c'est...Envoyé par gorgonite
![]()
... enfin, c'est vraiment suicidaire, sado-maso !
Il faudrait vraiment faire un vrai bon tuto pour Camlp4, surtout que les mecs à l'INRIA ne trouvent même plus bon de documenter les nouvelles possibilités de leur programme !
Juste pour donner un bémol à tous les conseils d'utilisation de générateurs de parseurs.
D'après mon expérience, qui comporte la programmation de petits parseurs et des front-end pour des langages complets, avec et sans générateurs et la programmation de générateurs, les générateurs -- en particulier ceux basé sur les automates à piles -- ne sont réellement utiles que dans la zone de complexité moyenne, et quand on n'est pas trop exigeant sur la qualité du traitement des erreurs.
Pour des langages simples, c'est généralement plus simple de le faire à la main.
Pour des langages compliqués, c'est aussi généralement plus simple de le faire à la main, car ces langages ont souvent des caractéristiques qui ne se conforment pas aux hypothèses de base des générateurs.
Il y a des critères qui augmentent la zone de pertinence des générateurs:
- la familiarité avec le générateur (si on le connait déjà, ce peut être pertinent de l'utilisé pour un projet simple ou plus complexe)
- le fait que le langage ne soit pas encore figé (c'est généralement plus facile de changer le langage accepté par un parseur généré que par un parseur écrit à la main)
- le fait que le choix de la technique de génération puisse influencer la grammaire (si on peut adapter la grammaire à la technique utilisée par le générateur, on peut enlever les structures syntaxiques à problèmes).
J'ai moins de problèmes avec les générateurs d'analyseurs lexicaux. Mais les écrire à la main ne me pose pas de problèmes non plus.
Dans le choix, il y a aussi la classe de langages à laquelle le langage créé appartient... il ne faut pas l'oublier ce critère-la !
C'est entre autres une bonne raison de préférer, parfois, mais pas tout le temps, Camlp4 que ocamlyacc/ocamllex, car ce premier reconnaît une classe de langages plus grande et est vraiment plus puissant.
Bonjour,
+1Pour des langages simples, c'est généralement plus simple de le faire à la main.
Par contre, lors de la spécification du langage, on se pose souvent la question d'intégrer ou non une syntaxe ou une fonctionnalité qui ne semble pas à priori indispensable. Quand je n'ai pas implémenté une telle fonctionalité pour gagner du temps, l'expérience a montré que presque systèmatiquement j'avais eu tort et que celà aurait été bien utile.
Voilà. Vous avez fait peur à bubuche87 avec vos histoires...![]()
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS
Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android
Tout dépend où tu situe le simple du compliqué ! Il me semble bien que la version C de Python qui est un Langage très complet et puissant est fait à la main ou du moins dans 95% du projet si je me trompe pas !Envoyé par Jean-Marc.Bourguet
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
J'ai ecrit de toute maniere que les generateurs n'etaient utiles que dans une zone de complexite moyenne :-) Et cette zone depend naturellement du generateur et de la personne qui doit mettre en place le parseur.Envoyé par Franck.H
Et la complexite en question est la complexite syntaxique. Le lisp est un langage tres complet et tres puissant. Sa syntaxe est d'une simplicite inegalable. Et une partie de sa puissance tient de cette simplicite.
franchement, je ne comprends pas ce que vous reprochez à flex ou ocamllex dans le cas des langages non "context-dependent"
j'ai fait un test hier soir pour parser un langage C sans typedef et macro... et ça marche très bien![]()
Je reproche rien a flex. En fait, les generateurs d'analyseurs lexicaux ont une zone d'applicabilite plus grande que les generateurs d'analyseurs syntaxiques.Envoyé par gorgonite
Tu as fais un parseur avec flex?j'ai fait un test hier soir pour parser un langage C sans typedef et macro... et ça marche très bien![]()
Sans typedef, c'est tricher. C'est la source de complexite principale dans l'analyse du C.
Partager