Still working on JsonParser
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ASTTag.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ASTTag.java
index 65acb21..cd3f223 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ASTTag.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ASTTag.java
@@ -17,6 +17,96 @@
package org.apache.vxquery.xmlquery.ast;
public enum ASTTag {
- VERSION_DECL, PROLOG, LIBRARY_MODULE, MODULE_DECLARATION, MAIN_MODULE, QUERY_BODY, BOUNDARY_SPACE_DECLARATION, DEFAULT_ELEMENT_NAMESPACE_DECLARATION, DEFAULT_FUNCTION_NAMESPACE_DECLARATION, OPTION_DECLARATION, FT_OPTION_DECLARATION, ORDERING_MODE_DECLARATION, EMPTY_ORDER_DECLARATION, COPY_NAMESPACES_DECLARATION, DEFAULT_COLLATION_DECLARATION, BASE_URI_DECLARATION, SCHEMA_IMPORT, MODULE_IMPORT, VARIABLE_DECLARATION, TYPE_DECLARATION, SEQUENCE_TYPE, ITEM_TYPE, ATOMIC_TYPE, ANY_NODE_TEST, ITEM_TEST, DOCUMENT_TEST, QNAME, ELEMENT_TEST, SCHEMA_ELEMENT_TEST, ATTRIBUTE_TEST, SCHEMA_ATTRIBUTE_TEST, TEXT_TEST, COMMENT_TEST, PI_TEST, TYPE_NAME, CONSTRUCTION_DECLARATION, FUNCTION_DECLARATION, FUNCTION_PARAMETER, ENCLOSED_EXPRESSION, EXPRESSION, FLWOR_EXPRESSION, FOR_CLAUSE, FOR_VARIABLE_DECLARATION, LET_VARIABLE_DECLARATION, LET_CLAUSE, WHERE_CLAUSE, ORDERBY_CLAUSE, ORDER_SPECIFICATION, QUANTIFIED_EXPRESSION, QUANTIFIED_VARIABLE_DECLARATION, TYPESWITCH_EXPRESSION, CASE_CLAUSE, IF_EXPRESSION, INFIX_EXPRESSION, TYPE_EXPRESSION, UNARY_EXPRESSION, VALIDATE_EXPRESSION, EXTENSION_EXPRESSION, PRAGMA_NODE, PATH_EXPRESSION, AXIS_STEP, NAME_TEST, FILTER_EXPRESSION, LITERAL, VARIABLE_REFERENCE, PARENTHESIZED_EXPRESSION, CONTEXT_ITEM, ORDERED_EXPRESSION, UNORDERED_EXPRESSION, FUNCTION_EXPRESSION, DIRECT_ELEMENT_CONSTRUCTOR, DIRECT_ATTRIBUTE_CONSTRUCTOR, DQUOTED_ATTRIBUTE_CONTENT, SQUOTED_ATTRIBUTE_CONTENT, TEXTUAL_NODE_CONTENT, CDATA_SECTION, DIRECT_COMMENT_CONSTRUCTOR, DIRECT_PI_CONSTRUCTOR, COMPUTED_DOCUMENT_CONSTRUCTOR, COMPUTED_ATTRIBUTE_CONSTRUCTOR, COMPUTED_ELEMENT_CONSTRUCTOR, COMPUTED_TEXT_CONSTRUCTOR, COMPUTED_COMMENT_CONSTRUCTOR, EMPTY_SEQUENCE_TYPE, RELATIVE_PATH_EXPRESSION, COMPUTED_PI_CONSTRUCTOR, NCNAME, CONTENT_CHARS, NAMESPACE_DECLARATION, SINGLE_TYPE
+ VERSION_DECL,
+ PROLOG,
+ LIBRARY_MODULE,
+ MODULE_DECLARATION,
+ MAIN_MODULE,
+ QUERY_BODY,
+ BOUNDARY_SPACE_DECLARATION,
+ DEFAULT_ELEMENT_NAMESPACE_DECLARATION,
+ DEFAULT_FUNCTION_NAMESPACE_DECLARATION,
+ OPTION_DECLARATION,
+ FT_OPTION_DECLARATION,
+ ORDERING_MODE_DECLARATION,
+ EMPTY_ORDER_DECLARATION,
+ COPY_NAMESPACES_DECLARATION,
+ DEFAULT_COLLATION_DECLARATION,
+ BASE_URI_DECLARATION,
+ SCHEMA_IMPORT,
+ MODULE_IMPORT,
+ VARIABLE_DECLARATION,
+ TYPE_DECLARATION,
+ SEQUENCE_TYPE,
+ ITEM_TYPE,
+ ATOMIC_TYPE,
+ ANY_NODE_TEST,
+ ITEM_TEST,
+ DOCUMENT_TEST,
+ QNAME,
+ ELEMENT_TEST,
+ SCHEMA_ELEMENT_TEST,
+ ATTRIBUTE_TEST,
+ SCHEMA_ATTRIBUTE_TEST,
+ TEXT_TEST,
+ COMMENT_TEST,
+ PI_TEST,
+ TYPE_NAME,
+ CONSTRUCTION_DECLARATION,
+ FUNCTION_DECLARATION,
+ FUNCTION_PARAMETER,
+ ENCLOSED_EXPRESSION,
+ EXPRESSION,
+ FLWOR_EXPRESSION,
+ FOR_CLAUSE,
+ FOR_VARIABLE_DECLARATION,
+ LET_VARIABLE_DECLARATION,
+ LET_CLAUSE,
+ WHERE_CLAUSE,
+ ORDERBY_CLAUSE,
+ ORDER_SPECIFICATION,
+ QUANTIFIED_EXPRESSION,
+ QUANTIFIED_VARIABLE_DECLARATION,
+ TYPESWITCH_EXPRESSION,
+ CASE_CLAUSE,
+ IF_EXPRESSION,
+ INFIX_EXPRESSION,
+ TYPE_EXPRESSION,
+ UNARY_EXPRESSION,
+ VALIDATE_EXPRESSION,
+ EXTENSION_EXPRESSION,
+ PRAGMA_NODE,
+ PATH_EXPRESSION,
+ AXIS_STEP,
+ NAME_TEST,
+ FILTER_EXPRESSION,
+ LITERAL,
+ VARIABLE_REFERENCE,
+ PARENTHESIZED_EXPRESSION,
+ CONTEXT_ITEM,
+ ORDERED_EXPRESSION,
+ UNORDERED_EXPRESSION,
+ FUNCTION_EXPRESSION,
+ ARRAY_CONSTRUCTOR,
+ DIRECT_ELEMENT_CONSTRUCTOR,
+ DIRECT_ATTRIBUTE_CONSTRUCTOR,
+ DQUOTED_ATTRIBUTE_CONTENT,
+ SQUOTED_ATTRIBUTE_CONTENT,
+ TEXTUAL_NODE_CONTENT,
+ CDATA_SECTION,
+ DIRECT_COMMENT_CONSTRUCTOR,
+ DIRECT_PI_CONSTRUCTOR,
+ COMPUTED_DOCUMENT_CONSTRUCTOR,
+ COMPUTED_ATTRIBUTE_CONSTRUCTOR,
+ COMPUTED_ELEMENT_CONSTRUCTOR,
+ COMPUTED_TEXT_CONSTRUCTOR,
+ COMPUTED_COMMENT_CONSTRUCTOR,
+ EMPTY_SEQUENCE_TYPE,
+ RELATIVE_PATH_EXPRESSION,
+ COMPUTED_PI_CONSTRUCTOR,
+ NCNAME,
+ CONTENT_CHARS,
+ NAMESPACE_DECLARATION,
+ SINGLE_TYPE
}
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ArrayConstructorNode.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ArrayConstructorNode.java
new file mode 100644
index 0000000..235f2c9
--- /dev/null
+++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/ast/ArrayConstructorNode.java
@@ -0,0 +1,27 @@
+package org.apache.vxquery.xmlquery.ast;
+
+import java.util.List;
+
+import org.apache.vxquery.util.SourceLocation;
+
+public class ArrayConstructorNode extends ASTNode {
+ private List<ASTNode> items;
+
+ public ArrayConstructorNode(SourceLocation loc) {
+ super(loc);
+ }
+
+ @Override
+ public ASTTag getTag() {
+ return ASTTag.ARRAY_CONSTRUCTOR;
+ }
+
+ public List<ASTNode> getItems() {
+ return items;
+ }
+
+ public void setItems(List<ASTNode> items) {
+ this.items = items;
+ }
+
+}
diff --git a/vxquery-core/src/main/javacc/xquery-grammar.jj b/vxquery-core/src/main/javacc/xquery-grammar.jj
index 7c0491a..91c9904 100644
--- a/vxquery-core/src/main/javacc/xquery-grammar.jj
+++ b/vxquery-core/src/main/javacc/xquery-grammar.jj
@@ -1796,6 +1796,7 @@
| LOOKAHEAD(2) expr = OrderedExpr()
| LOOKAHEAD(2) expr = UnorderedExpr()
| expr = Constructor()
+ | expr = JsonConstructor()
) {
return expr;
}
@@ -1937,6 +1938,47 @@
}
}
+ASTNode JsonConstructor() :
+{
+ ASTNode result;
+}
+{
+ result = ArrayConstructor()
+ {
+ return result;
+ }
+}
+
+ASTNode ArrayConstructor() :
+{
+ Token start, end;
+ List<ASTNode> items;
+}
+{
+ start="[" items=ArrayItemList() end="]" {
+ ArrayConstructorNode array = new ArrayConstructorNode(createSourceLocation(start));
+ array.setItems(items);
+ return array;
+ }
+}
+
+List<ASTNode> ArrayItemList() :
+{
+ List<ASTNode> items = new ArrayList<ASTNode>();
+ ASTNode arraynode;
+}
+{[
+ arraynode = Literal() {
+ items.add(arraynode);
+ } (
+ "," arraynode = Literal() {
+ items.add(arraynode);
+ }
+ )* ]{
+ return items;
+ }
+}
+
ASTNode Constructor() :
{
ASTNode result;