Re: [XQuery] A.2.2 Lexical Rules: bad transitions

Hi Michael.  Your last call comment in [1] has been given the ID 
qt-2004Jan0243-01.  This is the official response from the XQuery and XSLT 
working groups.

Your comments have been classified as flagging errors, and the resolution 
as follows.

> ------------------------------------------------------------------------
> Query:   <!---- blah ----> | e
> Query:   <?PITarget ?> | e
> Query:   <![CDATA[x]]> | e
> 
> Problem: In each case, after the ">", the lexer is in DEFAULT, which
>          doesn't recognize "|" (or any other operator).
> 
> Fix:     In DEFAULT, for the transitions on "<!----", "<?", and
 
> "<![CDATA[", change "pushState()" to "pushState(OPERATOR)".

Note: I
> reported this on November 28, 2002 (three versions ago), in
http:
> //lists.w3.org/Archives/Public/public-qt-comments/2002Nov/0105.html


The relevant patterns now "pushState(OPERATOR)" when in non-element 
content, and "pushState"  in the ELEMENT_CONTENT state.  I apologize for 
missing your first comment on this.  The samples you gave have been added 
to the regression tests for the test parser.

> 

Query:   <Q> { typeswitch (e) case e return e default return e } 
> </Q>

Problem: After the "}", the lexer is in OPERATOR, which 
> doesn't
         recognize "</".

Fix:     In DEFAULT, the 
> transition for <"typeswitch" "("> should not
         involve 
> "pushState(OPERATOR)".



<"typeswitch" "("> no longer pushes a state.  The sample you gave has been 
added to the regression tests for the test parser.

> 

Query:   processing-instruction {x} {x}

Problem: Accepting the 
> last "}" causes popState() on an empty stack.

Fix:     In OPERATOR,
> the transition for "{" needs "pushState()".



I believe I have now balanced the "{" "}" push/pops.  This also required 
some fixes to a few of the validate long patterns, so that they no longer 
push.  The sample you gave has been added to the regression tests for the 
test parser.

> 

Query:   declare variable $x as processing-instruction()? 
> external; e

Problem: After the ")", the lexer is in OPERATOR, which
> doesn't
         recognize "?".

Fix:     In ITEMTYPE, the 
> transition for <"processing-instruction" "(">
         should change
> "pushState(OPERATOR)" to
         "pushState(OCCURRENCEINDICATOR)".


Your suggested fix has been made, and the sample query added to the 
regression set.

> 

Query:   declare variable $x  external; e
Query:   declare 
> function Q() external; e

Problem: These leave DEFAULT on the stack.
> It's not clear whether this
         means that the lexer should 
> reject them, but even if not, it's
         still bad form: a lexer 
> with a maximum stack size would be much
         more likely to hit 
> its limit.

Fix:     In DEFAULT, for the transitions on <"declare" 
> "variable" "$">
         and <"declare" "function">, don't 
> "pushState(DEFAULT)".



The extraneous pushes have been removed.

Thank you for raising the comment.  I would be grateful if you would 
confirm that this provides an adequate resolution.

-scott

[1]  
http://lists.w3.org/Archives/Public/public-qt-comments/2004Jan/0243.html

Received on Monday, 26 January 2004 01:47:13 UTC