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.