Build Problems Resolved
Mark S. Miller
markm@caplet.com
Wed, 01 Sep 1999 18:46:06 -0700
At 04:53 PM 9/1/99 , mzukowski@bco.com wrote:
>Excellent overview. I'm having a disconnect on some things. What's the
>difference between the $ and the @? Does $ substitute and @ match?
Exactly. After a $ comes an E expression that provides the value to
substitute. After a @ comes an E pattern that is matched against the value
extracted from the original specimen.
>So your
>first match in there substitues in var, then parses it and then matches it
>filling in exp with a subtree?
I couldn't parse that ;)
>How exactly to you match trees? Do you first compile the match expression
>into a tree and then compare the results?
That happens to be how I do it, but it doesn't have to be how I do it. An
observably identical quasi-pattern parser could instead produce a
MatchMaker containing code for a decision tree compiled from the original
string. Think about compiling Prolog clause-heads to Warren Abstract
Machine instructions. Similarly, a ValueMaker could contain code for
generating a tree, without itself containing a tree. The analogy here
might be Prolog clause-bodies.
>How do you distinguish between parents and children?
I don't understand.
>My mindset is dominated by having the parser driving the control of a
>program, so maybe I'm just not "getting it" or I'm trying to solve problems
>which aren't appropriate for quasi-parsers.
I'm not really familiar with ANTLR (I did skim the web pages), but I think
you put your finger on it: In E, each parser is a small component within a
large program written in a general purpose computer language. The
super-structure is regular programming, not parsing. Parsing is only for
special subproblems.
>OK, yours is much much easier to read as far as what is output. But you are
>matching trees against trees and not really parsing trees, I think. Why
>does that matter? Overhead, and generality. You have to generate a tree
>for every expression you match against.
As explained above, I am, but I don't have to. Similarly, my "rx"
quasi-parser builds a Perl5 regular expression matcher for each regex
string. This object matches specimen strings, rather than having to
interpret a pattern-string at match time.
>Hmm, I have more thinking to do. Given a separate grammar you could enter
>it from a quasi-pattern...or you could specify grammar fragments in the
>quasi-pattern... but you don't want to parse a whole program, just a sub
>tree...
I'm not sure what you're saying, but it sounds right.
>Sorry my thoughts are so fragmented. I'll return to it tomorrow.
Looking forward to it.
Cheers,
--MarkM