We assume that using the proven Lex and YACC tools could be the best viable path but we are open for alternatives as long as the code development stays fully inside Smalltalk.
Smalltalk comes closest to the panacea programming language. It is the most sophisticated, most comprehensive and most productive software development environment available.
A lot of our existing code can be re-use for this. Our Elepub can be enhanced to act as a totally new type of database publishing generator of RIA UI and all content in one application.
Why not use any of the existing approaches?
None of the existing attempts meets our requirement that all sources are developed and stored inside the VisualWorks Smalltalk image. Most appear to be just experimental anyway.
The only tool that could provide this is ST2JS developed by Diego Gomez in Argentina in Squeak. Unfortunately, it is very closely bound to Squeak and it was given up at an experimental stage.
All the other approaches, especially the attempts to develop Smalltalk for JS inside the browser, may be academically interesting but are of no practical use for us in real product development. We see absolutely no sense in moving our development away from our very powerful and rich Smalltalk to some minimal, isolated and primitive new tool in the browser. That would mean several steps back. We don't understand why developers have choosen this approach rather than developing a good translator from within Smalltalk, which should be a lot easier anyway .
Overview on planned steps and releases
This is just a first raw plan. Most of these steps and details can be discussed and changed. Please note that the author is an application architect and developer using OOD since 1986 !!! but with only little theoretical knowledge of language grammar, syntax parsing, or "compiler stuff".
- Generate config data for Ext JS (mostly finished and soon available)
- Translate the essential components of Smalltalk code (see details on the next pages)
- Generate Joose class declarations from Smalltalk
- Perhaps solve the generation of arrays and other base class instances through functions
- Use will be only internal, for testing, refining the basic code translation, and first production
- Translation on LINUX via command line would be sufficient
- Refine and automate the entire translation process for a wider and more general use
- Make the output configurable from Smalltalk methods
- Interface the translation process to an obfuscator via XML (obfuscator is in use already)
- Add some first additional tools to the translator, especially related to data model definitions
- Generate more config data and code for JS, tables, Ajax structures, DB interface and more
- Translate 'all code' that runs in Smalltalk
- Blocks stored in variables as data and executed through message "value"
- Special Smalltalk syntax for creating Arrays (if too complicated)
- Cascaded Messages
- More details on the next pages