Hi,

I am using John Snelson XQuery parser library (XQuery library, to
parse XQuery files), from: http://github.com/jpcs/xqueryparser.xq.
The library module has been generated from the XQuery EBNF using
Gunther Rademacher's excellent REx Parser Generator (supporting both
XQuery and XSLT for output) from: http://bottlecaps.de/rex/.

I found out that the query below fails to execute on MarkLogic 8.0-4,
generating a stack overflow.  It seems to be related to the length of
the comment.  If I delete the last word in the comment, the query
succeeds.

I have tried the same one with Saxon, even expanding the size of the
comment by pasting its content 1,024 more times, and it succeeds.
Which let me think it might be a missed opportunity for tail recursion
optimization.

All sources (repro, parser lib and EBNF) are available as a Gist at
https://gist.github.com/fgeorges/c1f78a4279d9ff86f2fc.

```
import module namespace p = "XQueryML30"
   at "/project/parser/lib/XQueryML30.xq";

declare variable $src :=
'
(:~
 : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean
 : mauris ante, commodo sed ipsum et, malesuada blandit neque. Nulla
 : nulla neque, malesuada quis dignissim in, hendrerit non
 : lorem. Vestibulum in diam venenatis, semper lectus vel, finibus
 : magna. Pellentesque in vestibulum erat. Nam sollicitudin commodo
 : lorem, eu viverra justo feugiat faucibus. Integer blandit, dolor sed
 : facilisis tristique, nisl nunc pretium velit, non molestie ligula
 : tellus a quam. Aenean in mi at nisi cursus luctus. Integer dictum
 : tortor quam, ac sodales orci porttitor eu. Pellentesque tempor turpis
 : sed molestie ullamcorper. Cras et laoreet tortor, ut rhoncus
 : velit. Donec ac pretium tellus, et efficitur ligula. Cras eget enim
 : massa. Integer in nulla a nunc vestibulum finibus. Etiam sem nisi,
 : laoreet in sollicitudin in, semper at massa. Quisque eleifend sed
 : nulla id placerat. Aenean convallis egestas tristique.
 :
 : Proin consequat quam non urna lobortis, nec dapibus est
 : dignissim. Nunc tristique nisl non sem hendrerit congue sit amet id
 : neque. Vivamus semper magna sed condimentum facilisis. Donec
 : ultrices, tellus quis feugiat malesuada, neque diam faucibus mauris,
 : nec suscipit risus lectus non nisi. Nunc porttitor enim odio, at
 : interdum diam semper a. Etiam metus dui, rutrum venenatis lobortis
 : in, semper id dui. In nec urna convallis, maximus nibh vitae, blandit
 : risus. Duis non ornare augue, sed finibus nisi. Ut ac tellus id
 : tortor varius ultricies scelerisque at neque. In in dui in enim
 : interdum cursus ut a augue. Nulla porta id mi vitae pellentesque.
 :
 : Maecenas eget placerat...
 :)
declare function local:f()
{
   ()
};
';

fn:count(
   p:parse-XQuery($src))
```

Not sure anything can be done at the user code-level, but I thought
that might interest ingineering as a use case for optimization.

Regards,

-- 
Florent Georges
http://fgeorges.org/
http://h2oconsulting.be/
_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to