Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LVL++ SCRIPT EDITOR


Information sur la source

Catégorie :Texte Classé sous : clipboard, editeur, language, colorisation, syntaxique Niveau : Débutant Date de création : 05/09/2007 Date de mise à jour : 14/09/2007 23:52:35 Vu / téléchargé: 3 075 / 244

Note :
Aucune note

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
cette source n'est que le début d'un long projet

c'est éditeur de texte avec:
-colorisation syntaxique Lvl++, c++, pascal, php avec le composant FireColorSynth
-console des commandes effectuer
-clipboard
-syntaxe msgbox et string & integer variable son fini.


Mon projet:
Créer un language de programmation OpenSource...En Français..Oui!Oui!
j'aimerais innover ce langage en lui permettant de:
-compiler des apps Windows, Linux, Mac et autres si possible,
-de générer des codes source en c++, liberty basic(le langage qui m'a donné l'envie et le besoin de programmer),delphi...etc,
-que n'importe qui puisse développer chez lui et pour lui...

Bien sur je me rend compte de mon tous petit niveau.
Il y en a qui vont rire...
Mais c'est pas grave.

Bien sur s'y il en a que sa intéresse c'est avec grand plaisir.
"On est toujours plus fort avec c'est potes..."de Shuriken (IAM)

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Je Tenais a remercier particulièrement METANIL & f0xi  pour leur aide.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

 

Source

  • //===================================================
  • //======================EXECUTER=====================
  • procedure TfrmEditeur.ExecuterClick(Sender: TObject);
  • var sprocess, sprocess2, s, sGo, sCopy, MSGend: ansistring;
  • N, msgPos, INT: integer;
  • ini: TiniFile;
  • begin
  • Listbox1.Items.Add('Executer EDS');
  • txtedition.Lines.BeginUpdate;
  • try
  • for N := 0 to txtedition.Lines.Count - 1 do
  • begin
  • s := txtedition.Lines[N];
  • sGo := txtedition.Lines[N];
  • sprocess := txtedition.Lines[N];
  • sprocess2 := Copy(sprocess, 1, 3);
  • //=======================FIN=====================
  • if sprocess2 = 'fin' then
  • Break
  • //=======================MSG=====================
  • else if sprocess2 = 'msg' then
  • //Cherche une chaine de caractère commençant par ' " '.
  • while true do begin // si il y en a une...
  • msgPos := Pos('"', sGo);
  • if msgpos <> 0 then begin
  • sCopy := Copy(sGo, msgPos + 1, Length(sGo));
  • if pos('"', scopy) > 0 then begin
  • MSGend := '"' + copy(scopy, 1, pos('"', scopy));
  • delete(sgo, msgpos + 1, length(MSGend));
  • end
  • else break; // pas de fin de chaine marque par guillemet
  • MSGEND := StrReplace(chr(34), '', MSGend);
  • showmessage(MSGend); // ---------------dans MSGend ya ton mot
  • Listbox1.Items.Add('MessageBox '+'"'+MSGend+'"');
  • end
  • else break;
  • end
  • //=======================STR=====================
  • else if sprocess2 = 'str' then
  • //Cherche une chaine de caractère commençant par ' " '.
  • while true do begin // si il y en a une...
  • msgPos := Pos('"', sGo);
  • if msgpos <> 0 then begin
  • sCopy := Copy(sGo, msgPos + 1, Length(sGo));
  • if pos('"', scopy) > 0 then begin
  • MSGend := '"' + copy(scopy, 1, pos('"', scopy));
  • delete(sgo, msgpos + 1, length(MSGend));
  • end
  • else break; // pas de fin de chaine marque par guillemet
  • ini := tinifile.Create('C:\Lvl.ini');
  • MSGEND := StrReplace(chr(34), '', MSGend);
  • ini.WriteString('STRING', Msgend, Msgend);
  • Listbox1.Items.Add('Var String '+'"'+MSGend+'"'+' '+'Stocké dans (C:\Lvl.ini)');
  • ini.Free
  • end
  • else break;
  • end
  • //=======================STR=====================
  • else if sprocess2 = 'int' then
  • //Cherche une chaine de caractère commençant par ' " '.
  • while true do begin // si il y en a une...
  • msgPos := Pos('"', sGo);
  • if msgpos <> 0 then begin
  • sCopy := Copy(sGo, msgPos + 1, Length(sGo));
  • if pos('"', scopy) > 0 then begin
  • MSGend := '"' + copy(scopy, 1, pos('"', scopy));
  • delete(sgo, msgpos + 1, length(MSGend));
  • end
  • else break; // pas de fin de chaine marque par guillemet
  • ini := tinifile.Create('C:\Lvl.ini');
  • MSGEND := StrReplace(chr(34), '', MSGend);
  • INT := strtoint(MSGend);
  • ini.WriteInteger('INTEGER', Msgend, INT);
  • Listbox1.Items.Add('Var Integer '+'"'+MSGend+'"'+' '+'Stocké dans (C:\Lvl.ini)');
  • ini.Free
  • end
  • else break;
  • end
  • end;
  • finally
  • txtedition.Lines.EndUpdate;
  • end;
  • end;
//===================================================
//======================EXECUTER=====================

procedure TfrmEditeur.ExecuterClick(Sender: TObject);

var sprocess, sprocess2, s, sGo, sCopy, MSGend: ansistring;
  N, msgPos, INT: integer;
  ini: TiniFile;

begin
  Listbox1.Items.Add('Executer EDS');
  txtedition.Lines.BeginUpdate;
  try
    for N := 0 to txtedition.Lines.Count - 1 do
    begin
      s := txtedition.Lines[N];
      sGo := txtedition.Lines[N];
      sprocess := txtedition.Lines[N];
      sprocess2 := Copy(sprocess, 1, 3);
//=======================FIN=====================
      if sprocess2 = 'fin' then
      Break
//=======================MSG=====================
      else if sprocess2 = 'msg' then
//Cherche une chaine de caractère commençant par ' " '.
        while true do begin // si il y en a une...
          msgPos := Pos('"', sGo);
          if msgpos <> 0 then begin
            sCopy := Copy(sGo, msgPos + 1, Length(sGo));
            if pos('"', scopy) > 0 then begin
              MSGend := '"' + copy(scopy, 1, pos('"', scopy));
              delete(sgo, msgpos + 1, length(MSGend));
            end
            else break; // pas de fin de chaine marque par guillemet
            MSGEND := StrReplace(chr(34), '', MSGend);
            showmessage(MSGend); // ---------------dans MSGend ya ton mot
            Listbox1.Items.Add('MessageBox '+'"'+MSGend+'"');
          end
          else break;
        end
//=======================STR=====================
      else if sprocess2 = 'str' then
//Cherche une chaine de caractère commençant par ' " '.
        while true do begin // si il y en a une...
          msgPos := Pos('"', sGo);
          if msgpos <> 0 then begin
            sCopy := Copy(sGo, msgPos + 1, Length(sGo));
            if pos('"', scopy) > 0 then begin
              MSGend := '"' + copy(scopy, 1, pos('"', scopy));
              delete(sgo, msgpos + 1, length(MSGend));
            end
            else break; // pas de fin de chaine marque par guillemet
            ini := tinifile.Create('C:\Lvl.ini');
            MSGEND := StrReplace(chr(34), '', MSGend);
            ini.WriteString('STRING', Msgend, Msgend);
            Listbox1.Items.Add('Var String '+'"'+MSGend+'"'+' '+'Stocké dans (C:\Lvl.ini)');
            ini.Free
          end
          else break;
        end
//=======================STR=====================
      else if sprocess2 = 'int' then
//Cherche une chaine de caractère commençant par ' " '.
        while true do begin // si il y en a une...
          msgPos := Pos('"', sGo);
          if msgpos <> 0 then begin
            sCopy := Copy(sGo, msgPos + 1, Length(sGo));
            if pos('"', scopy) > 0 then begin
              MSGend := '"' + copy(scopy, 1, pos('"', scopy));
              delete(sgo, msgpos + 1, length(MSGend));
            end
            else break; // pas de fin de chaine marque par guillemet
            ini := tinifile.Create('C:\Lvl.ini');
            MSGEND := StrReplace(chr(34), '', MSGend);
            INT := strtoint(MSGend);
            ini.WriteInteger('INTEGER', Msgend, INT);
            Listbox1.Items.Add('Var Integer '+'"'+MSGend+'"'+' '+'Stocké dans (C:\Lvl.ini)');
            ini.Free
          end
          else break;
        end

    end;
  finally
    txtedition.Lines.EndUpdate;
  end;
end;

Conclusion

Cette source seras mise a jour assez souvent vu le projet.
Si toute fois vous faite des mise a jour de cette source
veuillez me l'envoyer pour que je puis la diffuser.

Merci

Bien sur les idées et conseille sont aussi les bienvenue
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

05 septembre 2007 05:45:32 :
Utilisation du composant FireColorSynth pour la colorisation syntaxique
05 septembre 2007 07:00:18 :
quelques bug pas très importe réparer
10 septembre 2007 04:47:44 :
la première fonction de Lvl++ affiche MessageBox via Syntaxe: (msg "salut") analyse ligne par ligne de mon RichEdit Merci a métanil et Foxi pour leur aide Prochaine étape: syntaxe: (str.test "good") mettre en mémoire une variable string pour l'utiliser dans une condition
11 septembre 2007 17:33:12 :
j'ai amélioré la Procedure EXECUTER en faisant appel à une autre fiche. La syntaxe: str .clé.$valeur$ : et fini elle permet d'enregistré une variable string dans un fichier ini. je pense que l'analyse ligne par ligne a un petit bug. un Organigramme de la Procedure Executer et dans le ZIP
12 septembre 2007 19:31:34 :
Bug sur l'analyse ligne par ligne régler. Variable Integer fini. Prochaine mise a jour: Créer une condition simple.(sa va être dure...)
14 septembre 2007 23:52:35 :
- de multiple fonction ajouter, colorisation syntaxe en pascal, c++, php, - ouverture direct d'un fichier texte ou autre - tool bar ajouter pour un meilleur accès a certaine fonction

Commentaires et avis

signaler à un administrateur
Commentaire de f0xi le 05/09/2007 05:12:09 administrateur CS

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 (++) ...

signaler à un administrateur
Commentaire de craftsystem le 05/09/2007 05:38:58

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

signaler à un administrateur
Commentaire de sylvunix le 05/09/2007 10:05:41

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 !

signaler à un administrateur
Commentaire de craftsystem le 05/09/2007 10:29:41

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




signaler à un administrateur
Commentaire de sylvunix le 05/09/2007 11:30:04

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).


signaler à un administrateur
Commentaire de craftsystem le 05/09/2007 11:46:26

merci

signaler à un administrateur
Commentaire de Oniria le 05/09/2007 13:35:38

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

signaler à un administrateur
Commentaire de craftsystem le 05/09/2007 15:00: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

signaler à un administrateur
Commentaire de cirec le 05/09/2007 21:35:58 administrateur CS

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 !!!

signaler à un administrateur
Commentaire de craftsystem le 05/09/2007 22:08:26

Sa fait peur sur le coup
mais bon avec un peu de courage sa devrait le faire

merci pour cette PETITE SOURCE...lol

signaler à un administrateur
Commentaire de craftsystem le 09/09/2007 22:52:55

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é

signaler à un administrateur
Commentaire de matrix1 le 11/09/2007 15:22:12

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 ;)

signaler à un administrateur
Commentaire de craftsystem le 11/09/2007 17:35:40

Merci beaucoup
la mise a jour et dispo

signaler à un administrateur
Commentaire de Michel34 le 17/09/2007 13:26:05

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

signaler à un administrateur
Commentaire de craftsystem le 17/09/2007 16:59:10

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...

signaler à un administrateur
Commentaire de CptPingu le 20/09/2007 11:11:25

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.

signaler à un administrateur
Commentaire de craftsystem le 20/09/2007 12:13:25

sa c'est de l'aide qui me seras bien utile
je te remercie beaucoup pour toute c'est explication

signaler à un administrateur
Commentaire de metanil le 20/09/2007 18:01:14

moi je sais uqi tu es !

metanil

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Editeur de tournois CHALENGE,CHALENGE(Grosse GAlére) [ par gerter H ] Je suis debutant en delphi(prc VB ca montre vite ses limites). je cré un éditeur de tournois explication :Sur la première page on choisie le nombre de Problème d'enregistrement d'un editeur de propriété [ par almi ] Bonjour,J'ai cree un composant qui dispose d'une propriéte TPersisent nomme Params.Cette propriete contient elle meme un ensemble de proprietes scalai Editeur de niveau dans le cadre d'un projet informatique [ par bawoilz ] Dans le cadre de mon ecole d'informatique, je dois creer un editeur de niveau entre autre. Cependant, je n'ai aucune que de maigre connaissance en Del image dans un rich edit sans clipboard [ par chookoo ] Voilà. Je veux placer une image dans un rich edit sans avoir a utiliser le clipboard si possible. Une autre solution est possible. Utiliser le clipboa editeur de texte [ par