LVL++ SCRIPT EDITOR

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 5 sept. 2007 à 05:12
metanil Messages postés 51 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 13 novembre 2007 - 20 sept. 2007 à 18:01
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/43984-lvl-script-editor

metanil Messages postés 51 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 13 novembre 2007
20 sept. 2007 à 18:01
moi je sais uqi tu es !

metanil
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
20 sept. 2007 à 12:13
sa c'est de l'aide qui me seras bien utile
je te remercie beaucoup pour toute c'est explication
Utilisateur anonyme
20 sept. 2007 à 11:11
Les étapes:

1) Lexing:
Récupérer tout les tokens du fichier. Un design pattern "FlyWeight" est particulièrement adapté pour optimiser le stockage de ceux-ci. Si le lexing échoue (commentaires mal refermés, caractères invalides), retourner une erreur et tuer le script. Peut être fait à la main ou à l'aide de Flex/Bison.
Voir listes chaînées, design pattern.

2) Parsing:
Construire un arbre de grammaire à l'aide de tokens récupérer. Vérifier la grammaire au fur et à mesure. En cas d'erreur de grammaire, détruire proprement l'arbre, retourner une erreur et tuer le script. Peut être fait à la main ou à l'aide de Flex/Bison.
Voir les arbres généraux.

3) Binding:
Relier dans l'arbre chaque définition de variable ou de fonctions avec son appel. En cas de variable/fonctions orpheline, retourner une erreur "undefined variable", libérer proprement ce qui à été allouer, et tuer le script.
Voir les pointeurs et les arbres généraux, design pattern visitor.

4) Type checking:
A l'aide de l'arbre précédemment binder, vérifier que le type de la variable et son utilisation correspondent bien au même type. Par exemple si on essaie pas de stocker une string dans un int. En cas d'erreur, retourner une erreur "type mismatch", libérer proprement ce qui à été allouer, et tuer le script.
Voir design pattern visitor.

5) Exécution
Maintenant que le script à été entièrement vérifié, se servir de l'arbre pour exécuter ce qui à été écrit. Soit tu convertis ton langage en un langage connus (delphi, C, ...) afin de le compiler par la suite, soit tu crée un exécutable (donc tu convertis en assembleur), soit tu l'interprètes, cad tu l'exécute directement. Pour exécuter l'arbre, il suffit de le parcourir et de transcrire les actions à la volée.

Je te conseille de le faire en programmation orienté objet. Attention, ce projet est vraiment bien plus difficile que tu ne le penses...
Toutefois, c'est sympa de voir des gens motivés pour des choses un peu plus recherché qu'une n-ième "Calculatrice".
Je manque cruellement de temps en ce moment, mais j'aurais bien écrit un exemple de langage simplissime pour étayer mes dires.

Bonne chance à toi.
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
17 sept. 2007 à 16:59
Merci

je ne peux pas m'arrêter maintenant
sa dois faire 1 mois et quelque que je me suis lancé au delphi
et se projet ma tellement apris que je ne peux pas PAS continuer

je travaille en se moment sur le moyen d'interprété une simple condition
sa seras déjà bien...
cs_Michel34 Messages postés 79 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 27 juin 2011
17 sept. 2007 à 13:26
Je felicite ton courage,
Mais comme l'explique les autres c'est tres ambitieux , si tu commencer par exemple par ecrire un Add On a Delphi . Je m'explique si tu ecrit une vrai Librairie avec ses propres bibliotheques avec un langage basique en francais et que l'on compilera tout simplement avec Delphi du fait que c'est sous l'environnement Delphi que l'on travaillera , pour te faire une idée un peu le langage Windev .
enfin pour moi ca serait a peu pres le meme chalenge pour toi.
je te souhaite bonne continuation dans tes projets.

Michel
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
11 sept. 2007 à 17:35
Merci beaucoup
la mise a jour et dispo
cs_matrix1 Messages postés 169 Date d'inscription dimanche 16 février 2003 Statut Membre Dernière intervention 15 avril 2008
11 sept. 2007 à 15:22
je te souhaite bon courage man, et je peut te dire qur si t'a le feeling que la programmation c'est tous ce que tu sais faire dans la vie, ben! continue, je te conseil de télécharger la documentation de la creation de noyau linux ainsi que de tous l'os, car c gartuit et disponible, pq? ben! simplement car même c tu prendra bc de temps pour faire un langage ou même si tu ne peut pas le faire, tu vas apprendre bc de chose, je te consiel de ne pas arreter , t'es encore jeun et ta tout le temps ;)
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
9 sept. 2007 à 22:52
Salut
je viens de testé ce code pour analyser ligne par ligne un RichEdit, mais j'ai un souci...
Elle lis juste ma primière ligne en boucle


CODE:

procedure TForm1.ExecuterClick(Sender: TObject);
var sprocess, sprocess2, s, sGo, sCopy, MSGend : string;
N, msgPos, j : integer;
msg : string;
function isValidChar(const c : char) : boolean;
const validChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*''(),{}|\^~[]`<>#%|<>;/?:@&=';
begin
result := Pos(c, validChars) <> 0;
end;
begin
//début de ton code
RichEdit.Lines.BeginUpdate;
try
for N:= 0 to RichEdit.Lines.Count-1 do
Begin
s:= RichEdit.Lines[N];
sGo:= RichEdit.Lines[N];
sprocess:=RichEdit.Lines[N];
sprocess2:= Copy(sprocess, 1, 3);
if sprocess2 = 'fin' then
exit
else if sprocess2 = 'msg' then
//début de l'analyse de syntaxe
//Cherche une chaine de caractère commençant par ' " '.
msgPos:= Pos('"', sGo);
While msgPos <> 0 do begin // si il y en a une...
sCopy:= Copy(sGo, msgPos, Length(sGo));
j:= 1;
MSGend := '"';
//Cherche la fin de la chaine de caractère.
While isValidChar(sCopy[j]) do begin
MSGend := MSGend + sCopy[j];
j:=j + 1;
end;
msg := copy(sCopy, j, length(sCopy));
//===========================================================
showmessage (msg);
//===========================================================
//Fin de ton code
RichEdit.Lines[N]:= s;
end;
end;
finally
RichEdit.Lines.EndUpdate
end;
end;
end.


j'ai mis un RichEdit et un Button pour le test
et j'ai utiliser la méthode HighLightUrl
pour analyser mes syntaxes.

voilà
si on peu m'éclairé
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
5 sept. 2007 à 22:08
Sa fait peur sur le coup
mais bon avec un peu de courage sa devrait le faire

merci pour cette PETITE SOURCE...lol
Utilisateur anonyme
5 sept. 2007 à 21:35
Salut,

tu te lances dans un sacré boulot ...
je ne sais pas si tu te rend compte de la somme de travail et de connaissance qu'il faut
pour pouvoir donner "vie" a un tel projet

Maintenant si tu veux voir un compilateur écrit en Delphi
afin de te rendre compte de ce qui t'attend ... c'est ici : http://other.jrsoftware.org/ip/
bien que le projet soit gelé il reste quand même un très bon exemple et a plusieurs niveaux
à voir absolument !!!
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
5 sept. 2007 à 15:00
J'y travaille déjà, mais merci pour toute c'est info.

je me suis fais un petit délire de type de syntaxe que je voudrais utiliser

dite moi si c'est clair et facile a accimiler

exemple:

: commentaire

: annoncer une variable string
x. ok = "good"

: condition
si ok = "good" alors
msg "good" : messagebox
sinon
: saute vers la case bad
-> bad
: addresse de bad
<- bad
msg "bad"

se n'est qu'une esquise
il me reste tellement a apprendre
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
5 sept. 2007 à 13:35
Bonjour,

Je pense que c'est une bonne initiative, mais il faut déja penser à ce que va apporter ton langage aux différents développeurs. Il existe déja beaucoup de langages différents mais dont chacun apporte ses avantages et ses inconvénients. Je pense que avant de créer un langage, il faut bien poser à plat les besoins des différents programmeurs. Si on regarde de plus pret, la grosse tendance et la programmation facile et rapide. Si on doit passer plusieurs mois à apprendre un langage que l'on est le seul à connaitre, ton langage sera mort nés. Par contre, si tu créer un langage simple, mais puissant, qui apporte de réels avantages par rapport aux autres, ton langage sera utilisé par beaucoup de monde. Je travaille dans la programmation industrielle, nous utilisons un environnement de développement appelé ISAGRAF. Cet environnement est exceptionnel car il est simple car il y a 2 type principaux de programmation : graphique (les opérations sont des boites affichées que l'on relit entre elle par des fils), textuelle (on peut ecrire des partie de code en pseudo C ). L'environnement ne compile pas, il crée des fichier C que l'on compile après avec le compilateur associé au µControleur du boitier à programmer.

En donnant cet exemple, je veux juste te faire remarquer que l'idée est bonne, mais que si tu veux ralier des programmeurs à ta cause, il faut un vrai cahier des charges en s'appuyant sur ce qui existe pour montrer les avantages d'un travail aussi colossal...

Par contre, Je souligne ton courage...

Oniria
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
5 sept. 2007 à 11:46
merci
sylvunix Messages postés 93 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 4 mars 2009
5 sept. 2007 à 11:30
Une simple recherche google te donnera toute la documentation et de nombreux exemples sur lex et yacc en langage C. Pour information, j'ai également utilisé il y a longtemps un shareware de Delphi qui fonctionnait très bien (http://www.bumblebeesoftware.com/index.htm).
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
5 sept. 2007 à 10:29
Je te remercie pour ton message clair
Je crois que je me suis emballé dans ce que j'ai dit (la fatigue et l'enthousiasme)
Franchement
Si je réussi un language interprété "Ce serait déjà un très bon début !" comme tu le dis

comment utilise ton flex et bison? svp que je regarde sa

merci encore
sylvunix Messages postés 93 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 4 mars 2009
5 sept. 2007 à 10:05
Bonjour craftsystem,

Tu vas me dire que j'en veux aux débutants et que je cherche à démotiver toute initiative. Mais comme le dit f0xi, que je salut au passage, créer son propre langage est un projet très ambitieux qui demande de nombreuses compétences.

J'ai pour ma part créé plusieurs langages dont un, il y a une dizaine d'années, qui a été intégré dans un logiciel commercial. Mon expérience me permet de t'affirmer que tu prends le problème par la fin. En résumé, tu t'attaques à l'emballage alors qu'il n'y a rien dans le paquet ...

Je m'explique.

Un langage se définit par une syntaxe et une grammaire. La syntaxe permet entre autre de dire comment on écrit une chaîne de caractères, le nom d'une variable ... La grammaire quant à elle détermine comment sont structurés les éléments d'un source (affectation, test, boucle, fonction, ...).

Cela doit être le point de départ de ton projet faute de quoi ton algorithme qui va traiter ton code source sera totalement bogué. Je te conseille de t'intéresser aux outils comme lex et yacc (ou flex et bison en open source) sur lesquels ont été créés de très nombreux langages interprétés ou non (principalement dans le monde Unix).

Ensuite vient la phase génération de code. Il faut à ce niveau avoir un très bon niveau en assembleur et une très grande maîtrise du système d'exploitation cible (format du binaire, appels systèmes ...).

Tu peux te limiter à la génération d'un code source dans un autre langage. L'intérêt me semble dans ce cas limité car tu auras en final un langage moins riche et complexe à utiliser car tu devras également compiler le source résultant ... (cf NSDK pour les connaisseurs).

Enfin la cerise sur le gâteau est l'éditeur de source ou EDI pour les versions plus évoluées. Optionnel, il offrira une interface agréable à l'utilisateur final.

Je pense que tu devrais revoir ta cible et te limiter à un langage interprété. Ce serait déjà un très bon début !
craftsystem Messages postés 143 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 7 mars 2009
5 sept. 2007 à 05:38
Je me doute que je vais me tirer les cheveux plus d'une fois,
Mais bon...
Franchement je vais te dire pour le moment j'y vais tranquille.
NO STRESS!!
Si je réussi a créer une condition. Déjà je serais trop heureux

Je poste la mise a jour de se pas
Fini le System HighlightURL
faute de ne pas pouvoir installer SynEdit
merci FireJocker pour ton composant FireColorSynth

http://www.phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&id=576&PHPSESSID=7c51bd43b9fabf18d721ec2281468ead
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 sept. 2007 à 05:12
je ne rigole pas, mais même moi j'ai abandonner ce genre d'idée.

faire son propre OS ou son propre langage.
ça demande la maitrise parfaite d'au moins deux choses, le C/C++ et l'assembleur.
sans parler des concepts et regles concernant l'elaboration de ce genre de choses.

sinon un truc, l'affichage des sources galere si on mets des caracteres speciaux dans le nom des repertoires (++) ...
Rejoignez-nous