revLISP (actually is scheme...) Some doubts on implementation.

Brian Yennie briany at qldlearning.com
Fri Mar 26 01:16:43 EST 2004


Andre,

Your approach seems reasonable. Parsers are a bear... and many written 
in C make use of lex/yacc tools, which are awful cryptic buggers but 
can do a lot of the work for you if you can provide a language grammar 
in BNF form. The push/pop approach is definitely a good idea. Other 
things to consider would be abstracting your tokenizer out and then 
feeding tokens to a lexical analysis engine as known constants (rather 
than the actual textual values), and possibly writing out even on paper 
some of the grammar expansion rules of the language so that you can 
carefully map out the possible states. It sounds like a worthy and 
interesting challenge, good luck!

In the name of trivia, I don't know if you know, but many years ago 
there was an xTalk compiler- CompileIt! in which you could write 
externals in augmented HyperTalk (and actually any old code resource if 
you knew what you were doing - even WDEFs and INITs and other fun Mac 
stuff like that). Apparently the author, Tom Pittman, wrote the 
original version of the compiler itself in HyperTalk, although the 
details are either obscure or I don't remember many of them by now! He 
also co-authored a book, "The Art of Compiler Design".

And our RunRev friend Ro Nagey even picked up my first commercial 
software way back when, a CompileIt! externals collection... oh the 
days of our lives!

- Brian

> (+ 1000 1)
>
> this is parsed to the following table:
> #lp
> +
> 1000
> 1
> #rp
>
> where #lp and #rp are used for parenthesis identification and thus 
> ilegal to use in the code. I thought to work like this, everytime 
> create_symbol function is called with an #rp value, it will go poping 
> the stack/table and evaluating it till find a #lp entry. This way, 
> when the ) is parsed and #rp is sent to create_symbol, it will first 
> pop '1' and since it's nothing but a number it will put in the stack, 
> then it will pop '1000' and to the same, then it will pop '+' this is 
> a predicate, that evaluate the first to things in the stack, this will 
> execute. and be put in the stack, when reaching a #lp entry, the first 
> thing in the stack will be inserted in the symbol table. Is this 
> clear? Is this a nice approach?



More information about the use-livecode mailing list