[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: XML file formats .... was: Re: gEDA-user: Some footprints I triedto create



> However, I ended up implementing a flat, lexer-only solution,
> which of course is possible only with reverse polish notation.  So, if
> you need a *small*, truely extensible (trivial, even), and easy to
> write parser, that doesn't require even more complexities like
> bison/yacc (not all platforms have them), then you might want to
> consider the RPN option as well. 

<pedantic_warning>
A lexer just tokenises an input stream for you; it matches the input 
against a set of regular expressions that you specify, and lets you 
execute some code when it finds a match.

You could, in principle, implement an RPN (postfix) calculator using 
something like lex, by just pushing matched tokens onto a stack and 
popping them off when you match an operator. IMHO, though, this would be 
pretty pointless. You might just as well match "a + b" or "+ a b" and 
make a note to carry out evaluation one or two tokens after the '+', 
instead of immediately. This then gives you an infix or a prefix 
calculator, rather than a postfix one. There's nothing special about the 
RPN case - it's just marginally easier to implement, at the expense of 
readability.

In practice, it's trivial (and normal) to just pass the matched tokens 
to a parser such as yacc, which lets you check the structure of the 
input, recover from errors, distinguish unary from binary operators, 
evaluate complex expressions with precedence and associativity, and so 
on. It's very difficult to build any smarts into a lexer-based solution, 
but easy when you've got a parser on top.

Where RPN is useful is where you have (very) simple stack-based 
hardware, hence the usage in calculators.
</pedantic_warning>

Evan


_______________________________________________
geda-user mailing list
geda-user@moria.seul.org
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user