PHOENIX INTERPRETOR

windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009 - 12 avril 2008 à 21:00
Aulios Messages postés 24 Date d'inscription vendredi 11 décembre 2009 Statut Membre Dernière intervention 30 mars 2011 - 5 juin 2010 à 21:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46343-phoenix-interpretor

Aulios Messages postés 24 Date d'inscription vendredi 11 décembre 2009 Statut Membre Dernière intervention 30 mars 2011
5 juin 2010 à 21:12
A et au passage je signale une erreur de syntaxe : tu as mis "<#" remplacé par "<?" c'est quoi ce truc ??? Juste avant tu marques "<#" remplacé par "<?php" il manque aps un truc ?... Si le "?>", corrige ton "<#" remplacé par "<?" en "#>" remplacé par "?>".

Au passage yoman64, j'ai également fais un interpréteur mais en php également mais moi pour couper un mot pris en compte comme de la syntaxe je fais :

<#
//write: 'the script exit and then crashed writing //write : '
#>

(Moi c'est avec ma syntaxe mais je donne une idée pour windows972)

En fait j'utilise le symbol ^ pour couper les mots prient en comtpe comme de la syntaxe :
<#
//write: 'the script ex^it and th^en crashed writing //write : '
#>

Et ensuite je remplace ^ par rien

Donc cela ne me prend pas en compte les mots correspondants à de la syntaxe.


Et pour afficher le ^ je fais un truc du genre &l656656565; (ou un truc du genre ;)


Cordialement Auhlios
Aulios Messages postés 24 Date d'inscription vendredi 11 décembre 2009 Statut Membre Dernière intervention 30 mars 2011
5 juin 2010 à 20:58
Bizarrement j'ai fait presqu'exactement pareil =D mais à la différence de toi j'utilise les $_GET pour permettre automatiquement à l'utilisateur d'interpréter mon langage du nom AfterPhp.
Cordialement Auhlios

PS: Site de mon langage : http://www.afterphp.totalh.com/
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
14 avril 2008 à 10:16
Franchement énorme !!! @Windows972 tu à inventé un langage qui existe déjà, mais le plus excellent, c'est que le style d'écriture est le même, sans le savoir !!! :p

Renseigne toi chez Wikipedia par exemple pour tout ce qui est compilation et analyse, c'est vrai que ca ne se résume pas à simplement remplacer une structure en une autre :p Sinon on aurait déjà beaucoup de c++ vers html ^^ ;)
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
13 avril 2008 à 20:23
vous avez l'air drolement fort en PHP !!
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
13 avril 2008 à 20:12
coucou747: Prends pas ça aux mots, j'utilise "pub" dans le sens de laisser une url vers un script qui pourrait l'aider...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 avril 2008 à 19:58
hum... j'ai pas d'autres urls, ce que j'ai fait, je l'ai fait en lisant quelques tutos (que j'ai pas sous la main) et en lisant ce que zerocool disait... avant de faire une "simple pub", j'ai donne pas mal d'explications... faut pas prendre ca pour de la pub... et si j'envoyais d'autres liens, je serais incapable d'expliquer comment ils fonctionnent... c'est une illustration pour mon explication, pas une pub...
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
13 avril 2008 à 19:50
Ah bah si coucou se fait de la pub, moi aussi :)

Voila ma source: http://www.vbfrance.com/codes/ALEX-SCRIPT-INTERPRETEUR-COMMANDE-VERSION_6957.aspx

@Windows972: tu n'as toujours pas dit quel est l'intérêt de ton code puisqu'il fait juste remplacer des fonctions par d'autre mots clés ?
Je vais répondre à ton MP ici en même temps: Il y a plusieurs façon de faire un remplacement correcte, partant du scannage caractère par caratère en passant par les regex et compagnies, cela dit c'est un peu complexe et puisque je vois pas trop l'utilité de ton code...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 avril 2008 à 19:41
Ah ok il a juste eu du bol de tomber sur un truc existant (je me disais aussi : je ne parvenais pas non plus à trouver d'exemple d'implémentation).
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
13 avril 2008 à 18:47
merci bocoup !!!
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 avril 2008 à 18:21
ouais, j'avais raison, t'as cree ton langage...

bon, en fait, ce qu'on fait en pratique, quand on veut parser un truc, on a deux "choses" importantes, le lexeur et le parseur.

un lexeur, c'est une sorte d'itterateur qui te sort des Tokens.
le parseur, c'est l'element qui traite tes Tokens pour les mettre dans une Stack, appeller des Reducteurs pour faire d'une Stack, un AST...

ouais, dit comme ca, c'est pas tres sex, alors on va faire un exemple concret...

le lexeur, c'est une sorte de moulinette, ca te prend une chaine de caractere, et ca la decoupe en elements appelles Tokens, ce sont les elements de bases.
pour la chaine : "1 + 3 * 5" le lexeur renvera les tokens : Token(NOMBRE, 1); Token(OPERATOR, '+'); Token(NOMBRE, 3), Token(OPERATOR, '*'), Token(NOMBRE, 5) dans l'ordre.

la Stack, c'est une pile, comme son nom l'indique, on peut empiler ou depiller des elements par le dessus, on doit aussi pouvoir regarder le dessus, et les elements proches du dessus.

Le Parseur appelle les retours du lexeurs, un par un. pour chaque Token :
il l'empile
il appelle les reducteurs tant que les reducteurs peuvent reduire.

Que font les reducteurs ?
Les reducteurs creent d'autres objets, genre des Operation_s. une Operation se fait a partie de TokensNombre -> TokensOperator -> TokenNombre

OUI c'est complique, mais ca marche comme ca...

j'ai fait quelques exemples ici :
http://www.cppfrance.com/codes/INTERPRETEUR-LANGAGE-PROCHE-RPN_44529.aspx
le lexer
http://files.codes-sources.com/fichier.aspx?id=44529&f=interpretor%2ffiles.c
le parseur
http://files.codes-sources.com/fichier.aspx?id=44529&f=interpretor%2fmain.c

et celui la en php :
http://www.phpcs.com/codes/PILE-PARSEUR-LEXER-TOKENS_44089.aspx

En C, c'est chiant a coder, et c'est VRAIMENT pas un langage adapte pour ca... en php, c'est trop lent.
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
13 avril 2008 à 18:06
justement je ne sais pas comment faire pour que mon code n'interprete pas dans les cote !!!
help
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
13 avril 2008 à 18:04
phoenix existe vraiment ??
je ne savait meme pas sa !!^^

j'ai juste donné ce nom comme sa !!
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
13 avril 2008 à 03:40
Hello world,

Moi après quelques recherches j'ai trouvé ça http://en.wikipedia.org/wiki/Phoenix_Object_Basic

Ce que malalam essait de te dire, et que tu semble pas saisir (ou t'as juste pas mis à jour le code) c'est de transformer ça:
# $file = str_replace ('<#', '<?php' , $file);
# $file = str_replace ('<#', '<?' , $file);
#
# $file = str_replace ('//write : ', 'echo' , $file);
# $file = str_replace ('//variable.', '$' , $file);
#
# $file = str_replace ('//if :', 'if (' , $file);
# $file = str_replace ('//elseif :', 'elseif (' , $file);
# $file = str_replace ('//else :', 'else {' , $file);
# $file = str_replace ('then', '){' , $file);
# $file = str_replace ('endif', '}' , $file);
#
#
# $file = str_replace ('//while :', 'while (' , $file);
# $file = str_replace ('/:', ') {' , $file);
# $file = str_replace ('exit', '}' , $file);

en

$find = array('<#','<#','//write : ','//variable.','//if :', '//elseif :','//else :', 'then','endif','//while :','/:', 'exit')
$replace = array('<?php' ,'echo' ,'$' ,'if (' , 'elseif (' ,'else {' , '){' ,'}' , 'while (' ,') {' ,'}')
$file = str_replace ($find,$replace, $file);

C'est nettement plus beau.
Cela dit c'est du n'importe quoi ton code, un simple replace ça peut foutre en l'air un code, il faut prendre en compte les quotes, les boucles, etc...
J'explique:

Si j'ai:
<#
//write: 'the script exit and then crashed writing //write : '
#>

Ben ton truc va me sortir :
<?php
echo 'the script } and ){ crashed writing echo'
?>

alors que moi j'veux affiché "the script exit and then crashed writing //write : "

Ça c'est sans parler que c'est pas flexible du tout de la façon que tu le fais, un espace mal placé et ton code ne le remplace pas comme il faut alors que c'est totalement valide...

J'ai déja fait un interpreteur de script il y a longtemps, en vb6 le mien (j'ai même eu un trophé sur vbfrance dans le temps pfff), alors je te le dis un interpreteur c'est bien plus qu'un simple str_replace... lol

Bon afin de pas porter un jugement finale trop négatif je veux savoir:

1. C'est quoi l'interet sachant que ça fait juste remplacer des fonctions en fonctions php et que c'est même pas flexible du tout et que ça prends pas en compte les erreurs ? Pourquoi pas juste écrire en php directement puisque ton script n'apporte pas rien de plus ?

2. Ton code se résume en 3 lignes de php, en sachant cela c'est plus un snippets qu'une source non?...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 avril 2008 à 23:38
j'ai beau chercher, j'arrive pas a trouver de lien vers une implementation correcte ou une description...
je dois dire que presente comme ca, c'est un langage qui peut difficilement attirer...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 23:00
Il n'a pas créé Phoenix, ce langage existe. C'est pour ça que je lui ai demandé de mettre des liens en parlant, vu qu'on ne peut pas dire que ce soit un langage très connu...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 avril 2008 à 22:52
ce que tu fais s'approche plus d'une compilation que d'une interpretation.
En effet, tu transforme un code source en un programme...
sauf qu'en fait, ni les interepreteurs, ni les compilateurs ne fonctionnent comme ca... ici, si tu as une erreur de syntaxe, le processus que tu as cree toi fonctionnera tres bien...
tu devrais te renseigner sur les ast, les parseurs et lexeurs. flex, yacc, bizon, etc... ca te serait tres utile.
t'as deux articles dans les deux derniers linux magazines france, qui traitent de ce sujet (mais en ocaml, malheureusement pour toi)
un truc qui m'etonne, pourquoi t'as cree ce type de langage ?
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:29
a ok j'ai compris c'est plus la peine ^^
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:24
merci pour l'info je rectifie tout mais je suis obligé de transformé mes instruction en code php donc pk tu dit "tu remplace une dizaine d'instruction basique par leurs iquivalence php"
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 21:20
Je te l'ai dit : str_replace() prend des tableaux en paramètres.
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:18
je ne vois pas comment faire otrement "tu remplace une dizaine d'instruction basique par leurs iquivalence php"
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:17
je vais l'ameliore avec sa propre bibliotheque de fonction
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 21:15
Et bien tâche, la prochaîne fois, de poster un code complet. Ou en tous cas, un minimum complet, parce que là...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 21:14
Sans compter que ton moteur peut se résumer en 1 ligne de code, tu montres dont le mauvais exemple. str_replace() prend des tableaux en paramètres. Tu fais 10 fois trop d'appels à cette fonction.
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:14
je sais mais je vais l'optimiser,ne t'iquiete pas !!!^^

je vais faire ma propre librairie de fonction,etc..ma propre gestion des erreurs
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 21:12
Hello,

2 remarques :
- tu devrais donner des liens pour ce langage : la référence, la doc, l'explication de ce que c'est etc.
- ton code n'a pas franchement d'intérêt en l'état. Tu ne fais que remplacer une dizaine d'instructions basiques par leur équivalent en php. J'ai vu des interpréteurs brainfuck plus évolués que le tien. Désolé d'être aussi dur mais là, je ne vois pas l'intérêt de ton code.
windows972 Messages postés 28 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 12 août 2009
12 avril 2008 à 21:00
tres bon interpreur !!
Rejoignez-nous