andrea@cs.Colorado.EDU (Boyd Hays) (06/05/91)
Hello,
The problem:
I'm working on a CASE tool written in Smalltalk-80 that allows one
to describe data translators. From the specification C is produced
that when linked with a runtime library carries out the translation.
Note that the requirements are increased by the fact that one can
"simulate" the specification from within the Smalltalk environment.
The rules are translated to Smalltalk blocks and operate on representative
data.
The generated translators are becoming more complex with creaping
featurism. I'm considering simplifying the system by replacing the
C generated code with either Smalltalk or Forth. What I'd really like
to do is keep the OO model of Smalltalk in the runtime as this would
simplify the way in which translation rules are generated. The current
rule language has a functional notation. My intent is to construct
either a subset of smalltalk's bytecode interpreter for runtime and just
export the bytecode specification or emit Forth and bolt in a Forth
interpreter into the Smalltalk environment.
Another alternative would be to put the C translation runtime into the
Smalltalk-80 as a user defined primitives. At least I would have to
maintain only one body of code.
The questions:
(I should point out that I have less than 4 hours experience with Forth
and that was with NEON circa 1986 so the questions may be odd.)
1) I tried running Yerk 3.3.2 on a Mac SE/30 with System 7 and it hangs
my machine. I tried Mops, it seems to work but there is no menu bar
and I don't know the word to quit.
2) Are the Neon/Yerk/Mops OO extensions available on other implementations?
I'm looking for something that could be used without royalties.
3) Are there any data translation words that are in common usage? I
would like to "table drive" the parsing of a binary input stream
into tokens of arbitray bit-lengths e.g. I need to define what a
float/int/records looks like or how to "suck-up" a word from a
byte-swaped stream.
4) Are there any Forth tools that allow you to create lexers/parsers
as in Lex/Yacc? There are times when it is necessary to specify
the form of the input stream as a grammar. I would prefer EBNF and
don't really care whether the generated code is LL/LR.
5) Where does a neophyte go to learn about Forth? I'm currently reading
the following:
- The Yerk Documentation
- Brodie's "Starting Forth"
- Winfield's "The Complete Forth"
- Pountain's "object-oriented forth"
Are there any other references that are a "must read"?
BTW,
The reason I'm looking at Forth is because of the Neon OO extensions
and the fact that I suspect the generated code will have close to the
execution sped of the currently compiled C. Some of the files that
need translation are quite large and complex.
The best research I've seen on this problem comes from the University
of Michigan and the University of Pittsburgh circa 1972 .. 1976. Does
anyone have any other pointers to relevent work (I know about Extract,
and Nan C. Shu's work).
Thanks in advance,
Boyd Hays