xsl-list
[Top] [All Lists]

RE: Parsing a string

2004-06-03 14:52:18

This works, off-course, when $select is writen in that way, 
but if it is, for
instance

SELECT * FROM aTable ORDER BY anotherColumn
SELECT * FROM aTable ORDER BY anotherColumn WHERE aColumn='something'

and worst

SELECT * FROM aTable WHERE aColumn=(SELECT aColumn FROM 
anotherTable WHERE
anotherColumn='somethingelse')

then it won't work. Of course i can put a lot of  xsl:if and 
xsl:when, but
hopefuly there's another way to do it.


First define a grammar for the language that you wish to parse. Then you
will know how big your problem is.

It's possible that this will be a grammar that can be analyzed using regular
expressions. In tha case you can use the regex facilities in XSLT 2.0 to
parse it, or custom extension functions that  invoke a regex library from an
XSLT 1.0 processor.

Regular expressions aren't powerful enough to parse all grammars, however,
and your "worst case" appears to be a recursive grammar which is certainly
too complex for this approach.

XSLT/XPath is not a language that is particularly well suited to writing
parsers. But I think your real problem is that you are scratching at the
surface of a problem that is rather more complex than you imagine. If you
can define a simple subset of SQL SELECT statements that you want to
analyze, then you have some chance of succeeding. If you think you can start
by handling very simple ones, and then tweak your code a bit whenever a new
variant comes along, then you are going to get badly stuck.

Michael Kay





<Prev in Thread] Current Thread [Next in Thread>