Lists Home |
Date Index |
Buttom up parsers do require implicit state; you've got a stack of contexts
that you are working with in the parsing tool. But the parsing tool manages
the the stack for you when it runs. Also, when you are building a parse
tree using such a tool, quite often you maintain state in the context items
on the stack to keep track of the parse.
From: John Cowan [mailto:email@example.com]
Sent: Thursday, September 19, 2002 12:21 PM
Cc: John Cowan; Lars Marius Garshol; firstname.lastname@example.org
Subject: Re: [xml-dev] Push / pull model
Keith W. Boone (email@example.com) scripsit:
> We may not use lexers that generate events, but we do use parsing tools
> work that way. The events are reductions, and the actions of the event
> either build a parse tree, or interpret the code. In fact, these tools
> provide for a very natural way to specify the events [as a grammar], and
> produce very readable parsers.
Sure, you can write bottom-up parsers and they work well with push lexers.
Indeed, the reason yacc is such a win is that bottom-up parsing can be
table-driven and not require implicit state. But that doesn't mean that
the recursive descent pattern (which does not seem to be included in
pattern catalogs: why?) is not a sweet spot for many cases.
The redoubtable James Clark has said that it was much more straightforward
to write a RELAX NG validator for the compact syntax than for the XML
syntax, basically because the XML syntax could not make use of the
recursive descent pattern easily because the info items were being pushed.
Dar fys ma vel gom co palt, "Hoc
Pys go iskili far maino woc?
Pro si go fys do roc de
Do cat ym maino bocte
De volt fac soc ma taimful gyroc!"
John Cowan firstname.lastname@example.org
"You need a change: try Canada" "You need a change: try China"
--fortune cookies opened by a couple that I know
The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>
The list archives are at http://lists.xml.org/archives/xml-dev/
To subscribe or unsubscribe from this list use the subscription