--- Comment #207 from Philippe Verdy <verd...@wanadoo.fr> 2010-08-04 17:41:52
In reply to comment #206)
Top-down analyzers are very easy to write, provided that you allow parsing to
be made via TWO generation points, instead of one: the first one converts and
accumulates the tokens in an array as long as it is not able to be processable
as a whole; this requiers a first parsing loop. Then the final step will ask
the expansion of parsed tokens lazily, in a basic processing loop which will
"eat" the tokens lazily, replacing them by their expansion, until there remains
only one token, a basic string that can be used as an expanded parameter.
I may try working on it, it's not so complicate to formulate, even without
using Yacc/bison/PCTCS, I have many ideas on how it will work : basically each
non-terminal token in the formal syntax becomes TWO functions, one is used when
parsing individual tokens, until the last one is reached, then a second
function will be used to expand itself, that will be used later (after
returning from the BY the caller, and ONLY when it will need the expansion in
its OWN expansion function.
For example the MediaWiki parser would become TWO functions: mediawiki_parse()
(which returns an array of tokens) and mediawiki_expand() which is stored as
the first token in the array. All ..._expand() functions would have two
parameters: one for the context in which they are to be evaluated (containing
for example time properties, cache properties, language properties ), and the
array itself to be expanded up to the end until they produce some simple text
The main concept is that tokens will expand lazily, but with full control by
the non-terminal parsed token which knows its context of expansion.
Basically the first step for each non-terminal token in the formal grammar is
performing a bottom-up conversion, from a top-down analysis (performed
recursively); this first step builds a AST tree (stored as a basic array of
children). The second step is performing a *conditional* top-down expansion of
the AST array into a flat text, ignoring nodes that don't need to be expanded
as their effective expansion will not be needed for the expansion of the
current AST node. Both steps are recursive, but in separate simple processing
OK this is still out of topic, but I don't know for now where to post these
concepts. I'll stop discussing this here.
Configure bugmail: https://bugzilla.wikimedia.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
Wikibugs-l mailing list