- From: <bugzilla@jessica.w3.org>
- Date: Tue, 06 Jan 2015 18:18:21 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=27537
Michael Dyck <jmdyck@ibiblio.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jmdyck@ibiblio.org
--- Comment #9 from Michael Dyck <jmdyck@ibiblio.org> ---
More explicitly, the productions:
CastExpr ::= UnaryExpr ( "cast" "as" SingleType )?
...
PostfixExpr ::= PrimaryExpr ( ... | Lookup | ArrowPostfix )*
would become:
CastExpr ::= ArrowExpr ( "cast" "as" SingleType )?
ArrowExpr ::= UnaryExpr ( "=>" ArrowFunctionSpecifier ArgumentList )*
...
PostfixExpr ::= PrimaryExpr ( ... | Lookup )*
I did a trial parser/applet build with these edits and they don't appear to
cause any problems (ambiguities or conflicts).
----
Here's the pertinent chunk of the XQuery/XPath 3.x expression hierarchy,
(where "v" can be read as "directly derives"), with the
current and proposed levels for ArrowExpr/ArrowPostfix.
CastExpr
v <- proposed position of ArrowExpr
UnaryExpr
v
ValueExpr
v
SimpleMapExpr
v
PathExpr
v
RelativePathExpr
v
StepExpr
v
PostfixExpr <- current level of ArrowPostfix
----
Here are some example queries that will be treated differently under
the status quo vs the proposed change.
Mike's examples above [in support of the proposed change] correspond to
examples "UnaryExpr", "PathExpr 2", and "SimpleMapExpr 2".
Perhaps the strongest argument against the proposed change would be based
on the last three examples ("PostfixExpr N"), in which a query such as
$a=>f()[1]
would become a syntax error. Instead, you would have to write
($a=>f())[1]
to get the effect that the former query currently has.
(Note that where an example uses a VarRef, any other PrimaryExpr would do,
e.g. a FunctionCall or a ContextItemExpr, which might make the example
more realistic.)
---------------------------------------------------------------------------
UnaryExpr:
- $x =>f()
currently: equiv to - ($x =>f())
proposed: equiv to (- $x) =>f()
---------------------------------------------------------------------------
ValueExpr -> ValidateExpr:
validate {Expr} =>f()
currently: syntax error
proposed: equiv to (validate {Expr}) =>f()
---------------------------------------------------------------------------
ValueExpr -> ExtensionExpr:
(#pragma#) {Expr} =>f()
currently: syntax error
proposed: equiv to ((#pragma#) {Expr}) =>f()
---------------------------------------------------------------------------
SimpleMapExpr 1:
$a =>f() ! $b =>g()
currently: equiv to ($a =>f()) ! ($b =>g())
proposed: syntax error
---------------------------------------------------------------------------
SimpleMapExpr 2:
$a ! $b =>f()
currently: equiv to $a ! ($b =>f())
proposed: equiv to ($a ! $b) =>f()
---------------------------------------------------------------------------
SimpleMapExpr 3:
a/b ! c/d =>f()
currently: syntax error
proposed: equiv to (a/b ! c/d) =>f()
---------------------------------------------------------------------------
PathExpr 1:
/ $a =>f()
currently: equiv to / ($a =>f())
proposed: equiv to (/ $a) =>f()
---------------------------------------------------------------------------
PathExpr 2:
/ a =>f()
currently: syntax error
proposed: equiv to (/ a) =>f()
---------------------------------------------------------------------------
RelativePathExpr 1:
$a =>f() / $b =>g()
currently: equiv to ($a =>f()) / ($b =>g())
proposed: syntax error
---------------------------------------------------------------------------
RelativePathExpr 2:
$a / $b =>g()
currently: equiv to $a / ($b =>g())
proposed: equiv to ($a / $b) =>g()
---------------------------------------------------------------------------
RelativePathExpr 3:
a / b =>g()
currently: syntax error
proposed: equiv to (a / b) =>g()
---------------------------------------------------------------------------
StepExpr -> AxisStep:
child:a[1] =>f()
currently: syntax error
proposed: equiv to (child:a[1]) =>f()
---------------------------------------------------------------------------
PostfixExpr 1:
$a =>f() [1]
currently: equiv to ($a =>f()) [1]
proposed: syntax error
---------------------------------------------------------------------------
PostfixExpr 2:
$a =>f() ("arg")
currently: equiv to ($a =>f()) ("arg")
proposed: syntax error
---------------------------------------------------------------------------
PostfixExpr 3:
$a =>f() ?key
currently: equiv to ($a =>f()) ?key
proposed: syntax error
---------------------------------------------------------------------------
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Tuesday, 6 January 2015 18:18:23 UTC