Bonjour VinsS et merci pour ta réponse.
Le mode de fonctionnement sera double. Pour le moment, je bosse sur un type de fichier qu'un non-programmeur pourra remplir de façon la plus intuitive possible. Voici un exemple suivi du rendu attendu.
LEXER (pour les programmeurs Python, afin de gagner un peu de temps, il y aura un équivalent sous forme de dictionnaire mais je n'ai pas encore réfléchi à cela car ce n'est pas ma priorité du moment).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
lexer::
comment::
//...
/*
...
*/
string::
escape::
\
keyword::
\n \t
quote::
"..."
keyword::
type::
int char
function::
#include{{space}}<{{letter --> letter number {.} --> letter number}}>
printf return
for if
symbol::
{ } ( ) [ ]
, ;
= == < >
* + ++
block::
{...}
(...)
[...] |
La coloration sera presque comme ci dessous à deux eceptions près :
- stdio.h et stdlib.h ne seront pas colorés.
- int et char auront une autre couleur que if et compagnie.
CODE COLORÉ PAR LE FORUM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
/* Un exemple de code de type C
*
* En espérant que cela sera instructif.
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Une boucle for
int compteur;
for(compteur = 0 ; compteur < 10 ; compteur++){
if(compteur == 1){
printf("Une étape dans la boucle for avec \"compteur\" différent de un.\n");
}
}
return 0;
// Fin de la fonction
} |
Il y aura bien entendu une version abrégée de
#include{{space}}<{{letter --> letter number {.} --> letter number}}>
qui sera
#include{{sp}}<{{a-Z --> a-Z 0-9 {.} --> a-Z 0-9}}>
La partie block du LEXER permettra de définir des blocs repliables : ce sera pour une sortie HTML.
A la place de regex, il y aura quelques constantes utiles comme ::space:: pour indiquer des espaces possibles, ou ... qui indique n'importe quel caractère.
Côté utilisation, il suffira de donner le LEXER et puis c'est tout. Le code analysé pourra ensuite être coloré.
Pour finir, je ferais en sorte que la classe qui s'occupe de colorer soit facilement surclassable : par exemple, les printers pour produire du texte HTML ou LaTeX seront simples à modifier même par quelqu'un qui connait peu Python (j'ai déjà fait quelques choses de ce type pour un outil permettant de mettre en forme des formules mathématiques).
Partager