Créer un "compilateur"

psgkiki Messages postés 43 Statut Membre -  
donuts08 Messages postés 523 Statut Membre -
Bonjour,

J'ai comme sujet de stage de créer un mini-langage et que à partir de ce langage se génère du PHP.

Plus clairement, je vais créer un script en utilisant mon langage de programmation que je vais créer et je vais devoir avoir comme résultat un fichier PHP avec le code correspondant.

Exemple :

Script nouveau langage :

<*repertoire_image("img/photo") *>
<*pour tout elt(id_image,titre) de la table(BDD.nomTable) aux attributs(id,titre) FAIRE
nouveau_fichier(elt.id_image
...
FIN POUR
*>
...

A l'aide d'un exécutable, sera crée autant de fichier PHP qu'il y a de elt dans la base de données.

Fichier PHP généré correspondant au script ci-dessus :

<?php $rep_image = "img/photo" ?>
<?php
//connexion base
$req = mysql_query("select * from table");
while($result = mysql_fetch_array($req))
{
$new = fopen ($result['id'].".php","w");
...
}

Voilà un petit peu le principe.

Pouvez-vous m'aider à démarrer ?

Je pense réaliser l'éxécutable en C avec Lex et Yacc. Mais comment faire que quand il rencontre <* il remplace par <?php, quand il rencontre repertoireimage("img/photo") il me le remplace par <?php $rep = "img/photo"; ?> ...

Merci beaucoup

1 réponse

donuts08 Messages postés 523 Statut Membre 39
 
bonjour,

utilise des expressions régulières...
0
psgkiki Messages postés 43 Statut Membre
 
C'est à dire ?

Je ne vois pas comment faire pour que mon programme lise le fichier .newlanguage et remplace tout par du code PHP.

Il faut bien définir quelque part qu'il remplace quelque chose par quelque chose ...
0
donuts08 Messages postés 523 Statut Membre 39 > psgkiki Messages postés 43 Statut Membre
 
hum si tu connais le fonctionnement d'un compilateur tu sais alors qu'il se contente de lire un fichier et de réécrire du code dans un autre fichier (il ne remplace pas le fichier newlanguage!)

Il va donc lire le fichier, et à l'aide d'expression régulières il va comparer ce qu'il lit à du code qu'il connait pour le remplacer par du PHP.
0
psgkiki Messages postés 43 Statut Membre > donuts08 Messages postés 523 Statut Membre
 
Ah nan désolé, je me suis mal exprimé. Comment faire pour que mon programme lise le fichier .newlangage et génère un fichier .php avec remplacement des expressions par le code PHP correspondant.

Comment et ou spécifié que lorsque il rencontre <*, il remplace par <?php.

Merci
0
donuts08 Messages postés 523 Statut Membre 39 > psgkiki Messages postés 43 Statut Membre
 
je ne connais pas bien le C mais si tu regardes ici je pense que tu pourras trouver ce qu'il te faut:

https://nicolasj.developpez.com/articles/regex/#LIV-A

Après il faut aussi que tu regardes comment ouvrir et lire des fichiers:

j'ai trouvé ça https://www.ltam.lu/cours-c/prg-c142.htm

ensuite il faut que tu définisse clairement la syntaxe de ton langage et par quoi tu vas remplacé les éléments, enfin j'espère que tu connais bien le C et le PHP avant de te lancer sur ce projet?
0
psgkiki Messages postés 43 Statut Membre > donuts08 Messages postés 523 Statut Membre
 
Bah pour l'instant, j'ai écrit mon code PHP qui sera mon résultat et j'ai essayé de le découper en éléments (token).

Mais comme je te l'ai dit je ne vois pas comment et où spécifier que lorsque l'on rencontre un élément, on le remplace par son code PHP.

Ou est ce que l'on spécifié que <* correspond à <?php, que ouvrir_fichier correspond à fopen(...)
0