Update: March 13th, 2017
The pdf file Parsing and Evaluating Mathematical Expression in Object Pascal contains a description of the source code for the one pass mathematical expression parser written for Free Pascal. As with the Delphi version, the parser in a sequence of four increasingly more complex set of units. While there is no important change to the original parser written for Delphi, the Free Pascal code contains some innovations and is hopefully better. By the same token, I hope the documentation will be better. The original parser and its documentation remain available.
The source code is available in four increasingly complex versions of the parser:
- Parsing a Simplified Grammar
- More Mathematical Operations and Comments
- Adding Constants, Functions and Variables
- Extended National Language Support
Finally, the units making up the one pass parser are consolidated into a package (simpleparser_package.zip) suitable for integration into the Lazarus IDE. Note that this is a runtime package only, no components are installed in the IDE's palette.
tcalc demonstration program, I noticed that it displayed
a Gtk warning:
That seemed strange as
tcalc is a console application,
which does not use a graphic library such as Gtk. Furthermore, that warning
did not appear in the previous version of
The problem was easy enough to identify because the most significant
change in the latest version is the addition of national language support.
SetDefaultLang found in
DefaultTranslator) switches between translation files
at program startup. It turns out that the
Interfaces unit is needed
and it pulls in the entire
LCL package. Without
Interfaces the code does not compile. And with it, it will not
compile using the
LCLBase package instead of the
package. Turns out that
SetDefaultLang wants to
translate all of the forms in the project. There are none in
but the unit does not know that.
So I decided to rip out the form updating code and to save that modified
version in a unit called
UnitTranslator. It does not require
Interfaces and the
LCL can be replaced with the
LCLBase package. I have explained in more details the changes
made. If you are interested, go here.
While at it, I cleaned up the archives, removing some unnecessary files.
Aside from the above changes to
tcalc there is no substantive change
in the downloadable archives.