it operates on an XML document that contains the LR-1 parsing tables generated from the BNF of the language.
FXSL provides a modification of Berkely YACC, which, given its ordinary input -- the BNF of an LR-1 unambiguous language, produces its parsing tables -- but in the XML format expected by func-lrParse.xsl
I can make available the set of BNF rules describing XPath 2.0, (or directly the LR parsing tables for it) which in the past I successfully used for parsing arbitrary XPath 2.0. If I remember well, it contains about 209 rules.
Now, the lr-parse() function expects as one of its parameters a function that it will call (callback) every time a rule is reduced. One must write such functions, depending on what is the wanted processing -- for example one may want the recognized language sentence to be executed immediately -- so the programmer will write an interpreter. In another case we may want to construct a syntax tree of the parsed sentence, which can be used as an intermediate stage in a compiler.
I
n your case, you can provide a callback that creates the desired XDM.
Another argument to this function is a lexical analyzer function -- that actually reads the raw text and emits a stream of terminal symbols.
The whole (the zip files don't contain the latest content) fxsl-xslt2 library can be downloaded using this command:
cvs -z3 -d:pserver:anonymous@a.cvs.sourceforge.net:/cvsroot/fxsl co -P fxsl-xslt2
I am planning to move the whole FXSL library from sourceforge to github or bitbucket -- hopefully soon.