Hello Till,
I think I made the changes that you suggested in [1]. I removed the
tokens, and I put JsonConstructor inside the Constructor. I, also,
changed the previous implementation to accept the Expr() product as it
is in the specs. After the changes, I debug again the code and it seems
to parse it correctly.
[1] https://github.com/apache/vxquery/pull/49
Thank you,
Christina
On 5/29/2016 10:03 PM, Till Westmann wrote:
Hi Riyafa, hi Christina,
a few ideas/suggestions:
(1) To be able to parse any of the constructors the JsonConstructors rule
needs to be a production that can be reached from the Expr()
production - as
Christina has done in [1] by adding them to the PrimaryExpr() production.
However, I think that we might want to add the JSONiq constructors as an
alternative in the Constructor() production instead.
(2) When parsing the ObjectConstructor I think that it might be
simpler to
create ASTNodes for the PairConstructors, to return those to from the
rule
to parse a single PairConstructor, and to then construct the list of
pairs
in the ObjectConstructor (instead of passing the LinkedHashMap down to
the
PairConstructors). This might cause a little more object creation/garbage
collection for now, but I think that the resulting grammar changes
will be
simpler.
(3) For the ArrayConstructor it might be simpler to create the rule
the way
it is written in the specification as
"[" expr = Expr() "]"
and then (a) build on the fact that an expression in XQuery returns a
sequence and (b) use that sequence to construct the array. Restricting
ourselves to Literals seems to cause more pain than benefit in this case.
(4) The js:null literal should not be a special case for Object values.
Instead, it should be a generally available literal in the Literal()
production.
(5) The XMLQuery Translator translates the ASTNodes into an Algebricks
[2]
plan. The plan consists of operators that (a) work on datasets and
that (b)
use functions to work on the individual items of these datasets.
While constructors are special in the grammar (and have their own
syntax),
they are regular functions during query optimization and at runtime.
So they
will be translated to function calls in the translator
(translateComputedElementConstructorNode is an example for this) that are
usually invoked by an assign-operator.
(6) Please try to keep the formatting in xquery-grammar.jj as close as
possible to the current productions. We don't have an automated formatter
for this one.
Thoughts?
Does this help or confuse?
Cheers,
Till
[2] http://dl.acm.org/citation.cfm?id=2806941
On 29 May 2016, at 20:17, Christina Pavlopoulou wrote:
Hi,
I made some changes to the array constructor in grammar.jj in [1]. I
debug it and I get the array that I put as input, so I guess it
parses it correctly. I have the same question as Riyafa, regarding
the translator. It is not so clear to me how I can create a translate
method.
[1] https://github.com/apache/vxquery/pull/48
Thank you,
Christina
On 05/29/2016 07:40 AM, Riyafa Abdul Hameed wrote:
Hi,
I have created a pull request with the Object constructor
implementation[1]. Since I cannot create a duplicate token of kind
"{", I
have attempted to use <Lbrace>. When I build the code and try to
debug to
see if the parser recognizes an object, a parserexception is thrown.
I have
also tried using <LbraceExprEnclosure>. But as I understand both are
not
START_TAGs. How can I change the grammar so that token "{" would be
recognized as a START_TAG to be processed by the MainModule() of the
parser.
Also a translate method for object constructor in the class
XMLQueryTranslator needs to be created. I am not sure I understand
how that
should be done. Kindly provide any guidance.
[1] https://github.com/apache/vxquery/pull/47
Thank you.
Yours sincerely,
Riyafa
On 24 May 2016 at 00:03, Riyafa Abdul Hameed <[email protected]>
wrote:
Hi,
I have been attempting to extend the xquery-grammar.jj file to support
JSONiq object constructor[1]. As I understand we need to create
classes
that extends ASTNode class in the package
org.apache.vxquery.xmlquery.ast
to be able to return ASTNode objects by the
ObjectConstructor--currently it
returns nothing. I hope it needs to be discussed what classes to be
created. Correct me if I am mistaken.
[1] https://github.com/apache/vxquery/pull/44
<https://github.com/apache/vxquery/pull/40>
Thank you.
Yours sincerely,
Riyafa
On 17 May 2016 at 22:57, Preston Carman <[email protected]> wrote:
As you (JSONiq GSOC students) look at extending the xquery-grammar.jj
[1] file for JSONiq, just remember to check the specification for
specifics [2]. The specification has a nice syntax block at the
beginning of the construction chapter. Also, check out the JavaCC
documentation [3] if you need to catch up on our parser.
Post if you have any questions. Also, post the final pull request for
the data model implementations.
[1]
https://github.com/apache/vxquery/blob/master/vxquery-core/src/main/javacc/xquery-grammar.jj
[2]
http://jsoniq.org/docs/JSONiqExtensionToXQuery/html-single/index.html#section-json-value-construction
[3] https://javacc.java.net/
--
Riyafa Abdul Hameed
Undergraduate, University of Moratuwa
Email: [email protected]
Website: https://riyafa.wordpress.com/ <http://riyafa.wordpress.com/>
<http://facebook.com/riyafa.ahf> <http://lk.linkedin.com/in/riyafa>
<http://twitter.com/Riyafa1>