**************************************************
tcLex : un gnrateur d'analyseur lexical pour Tcl
**************************************************

INTRODUCTION

tcLex est une extension Tcl servant  gnrer des lexeurs (analyseur lexical). 
Elle est inspire des commandes Unix et GNU lex et flex, qui sont des "outils 
pour gnrer des programmes effectuant des 'pattern-matching' sur du texte". 
tcLex est trs similaire  ces programmes,  part qu'elle utilise la philosophie 
et la syntaxe de Tcl, tandis que les autres utilisent leur propre syntaxe et 
sont utiliss en conjonction avec le langage C. Les personnes habitues  lex ou 
flex devraient donc se sentir familier avec tcLex. tcLex est une petite 
extension (la version compile pour Windows fait environ 20ko, et le source 
environ 150ko), parce qu'il utilise au maximum la bibliothque Tcl. Cependant, 
la prsente n'utilise plus le code de regexp de Tcl, mais une version modifie 
est maintenant incluse dans tcLex, ce qui la rend lgrement plus grosse (de 
quelques ko). tcLex devrait fonctionner avec Tcl 8.0 et ultrieurs. tcLex ne 
marchera JAMAIS avec des versions plus anciennes, parce qu'elle utilise le 
nouveau systme d'"objets" de Tcl 8.0 pour des raisons de performance. Les 
caractristiques les plus intressantes sont :

 * support multi-plateforme, grce  Tcl. Bien qu'elle ait t dveloppe sur
   Windows et teste sur Windows et Unix, elle devrait fonctionner sur d'autres 
   plateformes si une version de Tcl existe sur celles-ci. Les plateformes 
   supportes par Tcl sont Windows 95/NT, Unix (Linux, Solaris...) et Macintosh. 
   D'autres plateformes sont VMS, OS/2, NeXTStep, Amiga...
 * contrairement  lex et flex, qui gnrent uniquement des lexeurs statiques
   crits en C et destins  tre compils, tcLex gnre dynamiquement des 
   commandes Tcl qui peuvent tre utilises comme d'autes commandes C ou des 
   procdures Tcl  partir de scripts Tcl ou de programmes C.
 * elle utilise les expressions rgulires de Tcl. Ce qui signifie que vous
   n'avez pas  apprendre un nouveau langage de regexp.
 * elle fonctionne avec les "namespaces" de Tcl
 * les commandes gnres peuvent tre utilises en une passe ou
   incrmentallement, car elles maintiennent des informations d'tat. Ainsi, 
   plusieurs instances du mme lexeur (par exemple un parseur HTML) peuvent 
   tourner simultanment dans des contextes distincts et maintenir des tats 
   galement distincts (variables locales...). Les lexeurs n'ont pas besoin 
   d'tre spcialement conus pour tre utiliss incrmentallement, le mme 
   lexeur peut tre utilis en une passe ou incrmentallement de faon 
   transparente. Cette caractristique est particulirement utile lors du 
   traitement de texte issu d'un fichier ou d'une socket Internet (pages Web par 
   exemple), quand les donnes ne sont pas ncessairement disponibles au dbut 
   du traitement.


VERSION

La version actuelle de tcLex est 1.2a1. Le suffixe "a1" signifie "alpha 1", ce 
qui veut dire que cette version est une version incomplte par rapport aux 
fonctions de la future 1.2, qui tend et corrige la prcdente. Le fichier 
changements.txt dcrit les changements effectus entre la premire version de 
tcLex et la version actuelle. Bien que ce soit une version alpha, elle apporte 
plus de corrections de bugs que de nouveaux ;-). Dans ce cas, alpha signifie que 
de nombreuses fonctions prvues ne sont pas encore implmentes, et la 
documentation peut tre incomplte. La plupart des informations utiles sont dans 
le fichier changements.txt. Le fichier AFAIRE.txt contiens les fonctions prvues 
qui ne sont pas encore implmentes.


POURQUOI TCLEX ?

Quand j'ai dcid d'crire tcLex, j'avais besoin d'une faon efficace de parser 
des fichiers HTML et CSS, dans le but de construire un navigateur Web (un de mes 
projets  long terme). J'essayais dans ce but d'utiliser les commandes intgres 
de Tcl (regexp, regsub...). Bien qu'un parseur HTML basique fut assez simple  
crire, les limites de l'approche classique commencrent  apparaitre avec CSS.
J'avais besoin de limiter le champ d'action des commandes regexp/regsub  des 
zones spcifiques du texte pars, selon certaines rgles lexicales.
Par exemple, la manire classique de transformer un fichier HTML en liste Tcl 
(pour un traitement plus ais) est de remplacer (avec "regsub") les sparateurs 
de balises HTML (<>) avec des dlimiteurs de liste Tcl (mthode inaugure par 
Stephen Uhler dans sa html_lib), ou par des crochets pour une valuation 
ultrieure avec "subst" ou "eval". Les problmes commencent  apparaitre quand 
les sparateurs HTML sont utiliss dans les chaines de caractres pour les 
valeurs d'attributs (par exemple, "<IMG ALT='=> home'>"), dans ce cas cette 
mthode ne marche pas et la liste gnre est invalide. De plus, parser des 
fichiers malforms chouera certainement et gnrera une erreur. A part cela, 
les performances ne sont pas garanties, et perticulirement si vous voulez 
respecter les standards et grer tous les cas d'erreurs, et aussi parce que 
plusieurs passes sont ncessaires.
J'ai ensuite envisag d'crire des extension spcifiques en C pour parser ces 
fichiers, en utilisant des lexeurs crits avec lex ou flex, mais le problme est 
qu'on a besoin d'une extension par type de fichier. De plus, ces parseurs sont 
statiques et non extensibles, mme si leur base est la mme.
J'ai enfin dcid d'crire une extension Tcl permettant d'crire des lexeurs. 
Elle essaye d'abord de suivre la philosophie et la syntaxe de (f)lex tout en les 
adaptant  Tcl. Elle utilise ensuite la syntaxe de ligne de commande et les 
expressions rgulires de Tcl, et des scripts Tcl  la place de code C. Elle 
cre galement des commandes Tcl dynamiques au lieu de fichiers C destins  
tre compils. L'ide derrire cela est d'crire un "lexeur gnrique" qui 
serait scriptable et extensible avec Tcl. Ainsi, seule une extension est requise 
quelle que soit le type de donnes texte.


OU OBTENIR TCLEX

Page d'accueil :
http://www.multimania.com/fbonnet/Tcl/tcLex/index.htm

Fichiers de distribution :
 - http://www.multimania.com/fbonnet/pub/tcLex12a1.zip
  (binaires Windows pour Tcl8.0.5, Tcl8.1.1 et Tcl8.2)

 - http://www.multimania.com/fbonnet/pub/tcLex1.2a1.tar.gz
  (sources Windows/Unix pour Tcl8.0.5, Tcl8.1.1 et Tcl8.2)

 - http://www.multimania.com/fbonnet/pub/tcLex1.2a1.patch
  (fichier correctif pour la version 1.1.4)


SUPPORT

Depuis le 17/11/1998, tcLex dispose d'une liste de diffusion ddie. Le site Web 
de cette liste est : http://www.eGroups.com/list/tclex .
Pour souscrire a cette liste, envoyez un e-mail  l'adresse suivante : 
tclex-subscribe@egroups.com .
J'essaie galement de rpondre  tous les messages que les utilisateurs 
m'envoient concernant tcLex.


COMPILER L'EXTENSION

Si vous voulez compiler tcLex vous-mme, vous devez savoir qu'elle a besoin des 
sources Tcl pour compiler car elle utilise quelques structures internes. Elle 
peut tre compile avec Tcl 8.0, 8.1 ou 8.2.

* Windows:
Des bibliothques prcompiles sont disponibles dans une distribution binaire 
distincte. Cependant, vous pouvez compiler l'extension vous-mme. Allez dans le 
rpertoire "src", ditez le fichier "makefile.vc" pour Microsoft Visual C++ (pas 
de Borland  pour l'instant, des volontaires :-) et ditez les diffrentes 
variables pour reflter votre propre installation (compilateur, Tcl...). 

Ensuite, tapez sur la ligne de commande :

	nmake -f makefile.vc

Une fois la compilation russie, tapez :

	nmake -f makefile.vc install

Et il copiera les fichiers requis dans un sous-rpertoire du rpertoire "lib" de 
Tcl, afin qu'elle puisse tre utilise avec "package require tcLex".


* Unix:
(Merci  John Ellson <ellson@lucent.com> pour ces fichiers et instructions)
Pour compiler tcLex sur des systmes Unix, tapez:

      cd src
      chmod u+x configure
	chmod u+x install-sh
      ./configure
      make 
      make install

Le script de configuration tentera de dduire une variable $PREFIX d'une 
installation existante de Tcl. Vous pouvez toujours utiliser l'option 
--prefix=... si tclsh n'est pas dans votre $PATH, ou si diffrents tclsh sont 
installs.

Le Makefile gnr utilise le fichier $PREFIX/lib/tclConfig.sh laiss par la 
compilation de Tcl pour la plupart de ses paramtres de configuration.

Le Makefile gnr cre un fichier a pkgIndex.tcl compatible avec Tcl7.6 et 
ultrieurs.


* MacOS:
Il n'y a pas de makefile pour cette plateforme pour l'instant, cependant la 
compilation devrait tre facile, il n'y a que deux fichiers C. Les seules choses
dont le source a besoin sont les variables TCLEX_VERSION, BUILD_tcLex et 
USE_TCL_STUBS (si applicable) dfinies  la compilation. Vous pouvez jeter un 
oeil au makefile pour Windows.


INSTALLATION DES BINAIRES

Windows:
Trois bibliothques prcompiles sont fournies avec la distribution binaire, 
nomms tcLex80.dll, tcLex81.dll et tcLex82.dll, respectivement pour Tcl 8.0, 8.1 
et 8.2. Copiez-les simplement avec le fichier pkgIndex.tcl dans un 
sous-rpertoire de votre choix dans le rpertoire "lib" de Tcl.

MacOS, Unix:
Pas de distribution binaire pour l'instant.


DOCUMENTATION

Le rpertoire doc contient la documentation de tcLex dans des fichiers HTML. La 
documentation est disponible en anglais (sous-rp en) et franais (sous-rp fr). 
Lisez-la attentivement.


CONTACT, COMMENTAIRES, BUGS, etc.

* Veuillez s'il vous plait lire la license (fichier license.txt, en anglais 
  uniquement), et spcialement la "beerware clause" ;-) traduite ici :

" Ce logiciel est freeware. Cependant, il fait galement partie de la catgorie 
spciale "beerware". C'est--dire que si vous trouvez ce logiciel utile, ou que 
vous l'utilisez tous les jours, ou voulez me remercier pour ma modeste condition 
 la communaut Tcl, vous pouvez m'envoyer une bire d'une vos brasseries 
locales. Ma prfrence va aux bires d'abbaye de Belgique,  la cerveza 
mexicaine Corona, et  la stout irlandaise (Guiness for strength!), mais 
j'apprcie aussi les bires exotiques, rares ou originales d'un peu partout 
(note : je vis en France), et particulirement celles avec un emballage ou un 
got originaux. "

* Veuillez envoyer les bugs ou vos commentaires  <frederic.bonnet@ciril.fr>.
  Les rapports de bugs et le retour utilisateur sont les seules faons que 
  j'envisage pour amliorer et corriger tcLex. Si personne n'utilise tcLex je ne 
  vois aucune raison pourquoi je devrais amliorer cette extension sauf pour mon 
  usage personnel (pour lequel tcLex est plus qu'adquat pour le moment)
* Mme si vous n'avez aucun commentaire, j'apprcierais que chaque utilisateur
  de tcLex m'envoie un mail  l'adresse mentionne ci-dessus. Cela me donne des 
  informations sur le nombre d'utilisateurs qui est une part importante de ma 
  motivation. Je n'utiliserai pas votre adresse pour vous envoyer des messages 
  non sollicits, du spam, ou la vendre  des "tlmarquetteurs", mais 
  uniquement pour garder une trace des utilisateurs.
* Si vous trouvez un bug, un court script Tcl qui le met en vidence serait trs
  utile, ou encore mieux, compilez avec debugging et spcifiez o il a plant 
  dans ce script Tcl.


POUR CONTRIBUER

Comme j'utilise uniquement MS Visual C++ sous Windows, j'apprcierai des 
contributions de gens fournissant des makefiles pour d'autres compilateurs, des 
fichiers GNU autoconf, ou mieux, des extensions compile pour des distributions 
binaires sur Macintosh et Unix (particulirement Linux et Solaris).

J'aimerai aussi runir tous les lexeurs faits avec tcLex en un seul endroit (une 
page Web par exemple) comme une ressource de valeur pour la communaut Tcl. Des 
contributions intressantes seraient par exemple des parseurs pour HTML, XML, 
CSS, JavaScript et d'autres langages du Web.
