Mise à jour : 2017-03-13
Le fichier pdf intitulé Parsing and Evaluating Mathematical Expression in Object Pascal contient une description du code d'un analyseur syntaxique des expressions mathématiques écrit dans le dialecte Free Pascal du Pascal object. Comme dans la version pour Delphi, l'analyseur est présenté en quatre ensembles d'unités de plus en plus complexes. Il n'y a pas de modification importante de l'analyseur initialement écrit avec le dialecte Delphi. Mais la version du code élaboré avec Free Pascal contient des ajouts et est quelques améliorations, du moins je l'espère. J'espère aussi que la documentation est meilleure. Malheureusement elle ne demeure disponible qu'en anglais. L'analyseur original ainsi que la documentation sont encore disponibles.
Les fichiers source des quatre versions de plus en plus complexes de l'analyseur sont :
- Parsing a Simplified Grammar
- More Mathematical Operations and Comments
- Adding Constants, Functions and Variables
- Extended National Language Support
Enfin, l'archive simpleparser_package.zip est un paquet contenant les unités formant l'analyseur et pouvant être intégré à l'EDI Lazarus. Notons qu'il ne contient pas de composant à être installé dans la palette de l'EDI.
Mise à jour
En exécutant le programme de démonstration tcalc, j'ai remarqué qu'il a affiché un avertissement :
Voilà qui était bizarre, car tcalc est une application
console, qui n'utilise pas une bibliothèque graphique comme Gtk. De plus,
cet avertissement ne figure pas dans la version précédente de
tcalc.
Le problème a été assez facile à identifier parce que le changement le
plus significatif dans la dernière version est l'ajout du support
linguistique. Implicitement SetDefaultLang trouvé dans
LCLTranslator (utilisé dans DefaultTranslator)
sélectionne le fichier de traduction au démarrage du programme. Il s'avère
que l'unité Interfaces est nécessaire et il tire le LCL
paquet entier. Sans Interfaces le code ne compile pas.
Et avec cette unité, il ne compile pas en utilisant le paquet
LCLBase au lieu du paquet LCL. Il s'avère que
SetDefaultLang veut traduire tous les fiches du projet. Il n'y
en a pas dans tcalc mais l'unité ne le sait pas.
J'ai donc décidé d'éliminer le code de traduction des fiches et
d'enregistrer cette version modifiée dans une unité appelée
UnitTranslator. Il ne nécessite pas l'unité
Interfaces et le paquet LCL peut être remplacé
par le paquet LCLBase . J'ai expliqué plus en détail les
changements apportés. Si vous êtes intéressé, allez ici.
Tant qu'à y être, j'ai nettoyé les archives, en supprimant certains
fichiers inutiles. Mis à part les changements ci-dessus à tcalc
il n'y a pas de changement substantiel dans les archives téléchargeables.