
org.opencypher.v9_0.parser.javacc.cypher.jj Maven / Gradle / Ivy
The newest version!
options {
LOOKAHEAD = 1;
CHOICE_AMBIGUITY_CHECK = 2;
OTHER_AMBIGUITY_CHECK = 1;
DEBUG_PARSER = false;
DEBUG_LOOKAHEAD = false;
DEBUG_TOKEN_MANAGER = false;
ERROR_REPORTING = true;
JAVA_UNICODE_ESCAPE = true;
UNICODE_INPUT = false;
IGNORE_CASE = false;
USER_TOKEN_MANAGER = false;
USER_CHAR_STREAM = true;
BUILD_PARSER = true;
BUILD_TOKEN_MANAGER = true;
SANITY_CHECK = true;
FORCE_LA_CHECK = false;
TOKEN_EXTENDS = "WithOffset";
COMMON_TOKEN_ACTION = true;
}
PARSER_BEGIN(Cypher)
/*
* Copyright (c) Neo4j Sweden AB (http://neo4j.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.opencypher.v9_0.parser.javacc;
import scala.util.Either;
import scala.util.Left;
import scala.util.Right;
import java.util.ArrayList;
import java.util.List;
import org.opencypher.v9_0.ast.factory.ASTExceptionFactory;
import org.opencypher.v9_0.ast.factory.ASTFactory;
import org.opencypher.v9_0.ast.factory.ASTFactory.StringPos;
/** Simple brace matcher. */
public class Cypher {
ASTExceptionFactory exceptionFactory;
ASTFactory astFactory;
public Cypher(ASTFactory astFactory,
ASTExceptionFactory exceptionFactory,
CharStream stream) {
this(stream);
this.astFactory = astFactory;
this.exceptionFactory = exceptionFactory;
}
private POS pos(Token t) {
return astFactory.inputPosition(t.beginOffset, t.beginLine, t.beginColumn);
}
}
PARSER_END(Cypher)
TOKEN_MGR_DECLS :
{
public void CommonTokenAction(Token t)
{
CypherCharStream ccStream = (CypherCharStream)input_stream;
t.beginOffset = ccStream.getBeginOffset();
t.endOffset = ccStream.getEndOffset();
}
}
SKIP :
{
" "
| "\t"
| "\n"
| "\r"
}
/* COMMENTS */
SPECIAL_TOKEN :
{
< SINGLE_LINE_COMMENT: "//"(~["\n","\r"])* ("\n"|"\r"|"\r\n")? >
}
MORE :
{
<"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
|
"/*" : IN_MULTI_LINE_COMMENT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
MORE :
{
< ~[] >
}
/* LITERALS */
TOKEN :
{
< DECIMAL_DOUBLE: (["+","-"])? (
(["0"-"9"])+ "." (["0"-"9"])+ ()?
| "." (["0"-"9"])+ ()?
| (["0"-"9"])+
) >
|
< #DECIMAL_EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
|
< UNSIGNED_DECIMAL_INTEGER:
( ["1"-"9"] (["0"-"9"])* ) | "0" >
|
< UNSIGNED_HEX_INTEGER: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
|
< UNSIGNED_OCTAL_INTEGER: "0" ("o")? (["0"-"7"])+ >
}
MORE : { < STRING1_OPEN: "'" > : STRING1 }
MORE: { "\\\\" { image.delete(image.length()-2, image.length()); image.append("\\"); } }
MORE: { "\\\'" { image.delete(image.length()-2, image.length()); image.append("'"); } }
MORE: { "\\\"" { image.delete(image.length()-2, image.length()); image.append("\""); } }
MORE: { "\\b" { image.delete(image.length()-2, image.length()); image.append("\b"); } }
MORE: { "\\f" { image.delete(image.length()-2, image.length()); image.append("\f"); } }
MORE: { "\\n" { image.delete(image.length()-2, image.length()); image.append("\n"); } }
MORE: { "\\r" { image.delete(image.length()-2, image.length()); image.append("\r"); } }
MORE: { "\\t" { image.delete(image.length()-2, image.length()); image.append("\t"); } }
MORE: { "\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]" }
MORE: { < ~["'"] > }
TOKEN: { {matchedToken.image = image.substring(1, image.length()-1); } : DEFAULT }
MORE : { < STRING2_OPEN: "\"" > : STRING2 }
MORE: { "\\\\" { image.delete(image.length()-2, image.length()); image.append("\\"); } }
MORE: { "\\\'" { image.delete(image.length()-2, image.length()); image.append("'"); } }
MORE: { "\\\"" { image.delete(image.length()-2, image.length()); image.append("\""); } }
MORE: { "\\b" { image.delete(image.length()-2, image.length()); image.append("\b"); } }
MORE: { "\\f" { image.delete(image.length()-2, image.length()); image.append("\f"); } }
MORE: { "\\n" { image.delete(image.length()-2, image.length()); image.append("\n"); } }
MORE: { "\\r" { image.delete(image.length()-2, image.length()); image.append("\r"); } }
MORE: { "\\t" { image.delete(image.length()-2, image.length()); image.append("\t"); } }
MORE: { "\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]" }
MORE: { < ~["\""] > }
TOKEN: { {matchedToken.image = image.substring(1, image.length()-1); } : DEFAULT }
MORE : { < ESCAPED_SYMBOLIC_NAME_OPEN: "`" > : ESC_SYMB_NAME }
MORE: { < ~["`"] > }
MORE: { "``" { image.delete(image.length()-2, image.length()); image.append("`"); } }
TOKEN: { {matchedToken.image = image.substring(1, image.length()-1); } : DEFAULT }
/**
* add new tokens to SymbolicNameString() if they should be accepted as an identifier as well
* add new tokens to IdentifierTokens.tokens for correct filtering of identifier tokens
*/
TOKEN [IGNORE_CASE] :
{
< ALL_SHORTEST_PATH: "allShortestPaths" >
| < ALL: "ALL" >
| < AND: "AND" >
| < ANY: "ANY" >
| < AS: "AS" >
| < ASC: "ASC" ("ENDING")? >
| < ASSERT: "ASSERT" >
| < BAR: "|" >
| < BY: "BY" >
| < CALL: "CALL" >
| < CASE: "CASE" >
| < CATALOG: "CATALOG">
| < COMMIT: "COMMIT" >
| < CONSTRAINT: "CONSTRAINT" >
| < CONTAINS: "CONTAINS" >
| < COPY: "COPY" >
| < COUNT: "count" >
| < CREATE: "CREATE" >
| < CSV: "CSV" >
| < DATA: "DATA">
| < DATABASE: "DATABASE">
| < DATABASES: "DATABASES">
| < DBMS: "DBMS">
| < DEFAULT_TOKEN: "DEFAULT">
| < DELETE: "DELETE" >
| < DESC: "DESC" ("ENDING")? >
| < DESTROY: "DESTROY">
| < DETACH: "DETACH" >
| < DISTINCT: "DISTINCT" >
| < DIVIDE: "/" >
| < DOT: "." >
| < DOTDOT: ".." >
| < DROP: "DROP" >
| < DUMP: "DUMP">
| < ELSE: "ELSE" >
| < END: "END" >
| < ENDS: "ENDS" >
| < EQ: "=" >
| < EQUIV: "~" >
| < EXISTS: "EXISTS" >
| < EXTRACT: "EXTRACT" >
| < FALSE: "false">
| < FIELDTERMINATOR: "FIELDTERMINATOR" >
| < FILTER: "FILTER" >
| < FOREACH: "FOREACH" >
| < FROM: "FROM" >
| < GE: ">=" >
| < GRANT: "GRANT">
| < GRAPH: "GRAPH" >
| < GT: ">" >
| < HEADERS: "HEADERS" >
| < IF: "IF" >
| < IN: "IN" >
| < INDEX: "INDEX" >
| < IS: "IS" >
| < JOIN: "JOIN" >
| < KEY: "KEY" >
| < LBRACKET: "[" >
| < LCURLY: "{" >
| < LE: "<=" >
| < LIMITROWS: "LIMIT" >
| < LOAD: "LOAD" >
| < LPAREN: "(" >
| < LT: "<" >
| < MATCH: "MATCH" >
| < MERGE: "MERGE" >
| < MINUS: "-" >
| < MODULO: "%" >
| < NEQ: "!=" >
| < NEQ2: "<>" >
| < NODE: "NODE" >
| < NONE: "NONE" >
| < NOT: "NOT" >
| < NOWAIT: "NOWAIT">
| < NULL: "null">
| < OF: "OF" >
| < ON: "ON" >
| < OPTIONAL: "OPTIONAL" >
| < OR: "OR" >
| < ORDER: "ORDER" >
| < PERIODIC: "PERIODIC" >
| < PLUS: "+" >
| < POPULATED: "POPULATED">
| < POW: "^" >
| < RBRACKET: "]" >
| < RCURLY: "}" >
| < REDUCE: "REDUCE" >
| < REGEQ: "=~" >
| < REMOVE: "REMOVE" >
| < REPLACE: "REPLACE" >
| < RETURN: "RETURN" >
| < REVOKE: "REVOKE">
| < ROLE: "ROLE">
| < ROLES: "ROLES">
| < RPAREN: ")" >
| < SCAN: "SCAN" >
| < SEC: "SEC">
| < SECOND: "SECOND">
| < SECONDS: "SECONDS">
| < SEEK: "SEEK" >
| < SET: "SET" >
| < SHORTEST_PATH: "shortestPath" >
| < SHOW: "SHOW">
| < SINGLE: "SINGLE" >
| < SKIPROWS: "SKIP" >
| < START: "START">
| < STARTS: "STARTS" >
| < STOP: "STOP">
| < THEN: "THEN" >
| < TIMES: "*" >
| < TO: "TO" >
| < TRUE: "true">
| < UNION: "UNION" >
| < UNIQUE: "UNIQUE" >
| < UNWIND: "UNWIND" >
| < USE: "USE" >
| < USERS: "USERS">
| < USING: "USING" >
| < WAIT: "WAIT">
| < WHEN: "WHEN" >
| < WHERE: "WHERE" >
| < WITH: "WITH" >
| < XOR: "XOR" >
| < YIELD: "YIELD" >
}
/* IDENTIFIERS */
TOKEN :
{
< IDENTIFIER: ()* >
|
< #LETTER:
[ // all chars for which Character.isIdentifierStart is true except `$`
"A"-"Z",
"_",
"a"-"z",
"\u00a2"-"\u00a5",
"\u00aa",
"\u00b5",
"\u00ba",
"\u00c0"-"\u00d6",
"\u00d8"-"\u00f6",
"\u00f8"-"\u021f",
"\u0222"-"\u0233",
"\u0250"-"\u02ad",
"\u02b0"-"\u02b8",
"\u02bb"-"\u02c1",
"\u02d0"-"\u02d1",
"\u02e0"-"\u02e4",
"\u02ee",
"\u037a",
"\u0386",
"\u0388"-"\u038a",
"\u038c",
"\u038e"-"\u03a1",
"\u03a3"-"\u03ce",
"\u03d0"-"\u03d7",
"\u03da"-"\u03f3",
"\u0400"-"\u0481",
"\u048c"-"\u04c4",
"\u04c7"-"\u04c8",
"\u04cb"-"\u04cc",
"\u04d0"-"\u04f5",
"\u04f8"-"\u04f9",
"\u0531"-"\u0556",
"\u0559",
"\u0561"-"\u0587",
"\u05d0"-"\u05ea",
"\u05f0"-"\u05f2",
"\u0621"-"\u063a",
"\u0640"-"\u064a",
"\u0671"-"\u06d3",
"\u06d5",
"\u06e5"-"\u06e6",
"\u06fa"-"\u06fc",
"\u0710",
"\u0712"-"\u072c",
"\u0780"-"\u07a5",
"\u0905"-"\u0939",
"\u093d",
"\u0950",
"\u0958"-"\u0961",
"\u0985"-"\u098c",
"\u098f"-"\u0990",
"\u0993"-"\u09a8",
"\u09aa"-"\u09b0",
"\u09b2",
"\u09b6"-"\u09b9",
"\u09dc"-"\u09dd",
"\u09df"-"\u09e1",
"\u09f0"-"\u09f3",
"\u0a05"-"\u0a0a",
"\u0a0f"-"\u0a10",
"\u0a13"-"\u0a28",
"\u0a2a"-"\u0a30",
"\u0a32"-"\u0a33",
"\u0a35"-"\u0a36",
"\u0a38"-"\u0a39",
"\u0a59"-"\u0a5c",
"\u0a5e",
"\u0a72"-"\u0a74",
"\u0a85"-"\u0a8b",
"\u0a8d",
"\u0a8f"-"\u0a91",
"\u0a93"-"\u0aa8",
"\u0aaa"-"\u0ab0",
"\u0ab2"-"\u0ab3",
"\u0ab5"-"\u0ab9",
"\u0abd",
"\u0ad0",
"\u0ae0",
"\u0b05"-"\u0b0c",
"\u0b0f"-"\u0b10",
"\u0b13"-"\u0b28",
"\u0b2a"-"\u0b30",
"\u0b32"-"\u0b33",
"\u0b36"-"\u0b39",
"\u0b3d",
"\u0b5c"-"\u0b5d",
"\u0b5f"-"\u0b61",
"\u0b85"-"\u0b8a",
"\u0b8e"-"\u0b90",
"\u0b92"-"\u0b95",
"\u0b99"-"\u0b9a",
"\u0b9c",
"\u0b9e"-"\u0b9f",
"\u0ba3"-"\u0ba4",
"\u0ba8"-"\u0baa",
"\u0bae"-"\u0bb5",
"\u0bb7"-"\u0bb9",
"\u0c05"-"\u0c0c",
"\u0c0e"-"\u0c10",
"\u0c12"-"\u0c28",
"\u0c2a"-"\u0c33",
"\u0c35"-"\u0c39",
"\u0c60"-"\u0c61",
"\u0c85"-"\u0c8c",
"\u0c8e"-"\u0c90",
"\u0c92"-"\u0ca8",
"\u0caa"-"\u0cb3",
"\u0cb5"-"\u0cb9",
"\u0cde",
"\u0ce0"-"\u0ce1",
"\u0d05"-"\u0d0c",
"\u0d0e"-"\u0d10",
"\u0d12"-"\u0d28",
"\u0d2a"-"\u0d39",
"\u0d60"-"\u0d61",
"\u0d85"-"\u0d96",
"\u0d9a"-"\u0db1",
"\u0db3"-"\u0dbb",
"\u0dbd",
"\u0dc0"-"\u0dc6",
"\u0e01"-"\u0e30",
"\u0e32"-"\u0e33",
"\u0e3f"-"\u0e46",
"\u0e81"-"\u0e82",
"\u0e84",
"\u0e87"-"\u0e88",
"\u0e8a",
"\u0e8d",
"\u0e94"-"\u0e97",
"\u0e99"-"\u0e9f",
"\u0ea1"-"\u0ea3",
"\u0ea5",
"\u0ea7",
"\u0eaa"-"\u0eab",
"\u0ead"-"\u0eb0",
"\u0eb2"-"\u0eb3",
"\u0ebd",
"\u0ec0"-"\u0ec4",
"\u0ec6",
"\u0edc"-"\u0edd",
"\u0f00",
"\u0f40"-"\u0f47",
"\u0f49"-"\u0f6a",
"\u0f88"-"\u0f8b",
"\u1000"-"\u1021",
"\u1023"-"\u1027",
"\u1029"-"\u102a",
"\u1050"-"\u1055",
"\u10a0"-"\u10c5",
"\u10d0"-"\u10f6",
"\u1100"-"\u1159",
"\u115f"-"\u11a2",
"\u11a8"-"\u11f9",
"\u1200"-"\u1206",
"\u1208"-"\u1246",
"\u1248",
"\u124a"-"\u124d",
"\u1250"-"\u1256",
"\u1258",
"\u125a"-"\u125d",
"\u1260"-"\u1286",
"\u1288",
"\u128a"-"\u128d",
"\u1290"-"\u12ae",
"\u12b0",
"\u12b2"-"\u12b5",
"\u12b8"-"\u12be",
"\u12c0",
"\u12c2"-"\u12c5",
"\u12c8"-"\u12ce",
"\u12d0"-"\u12d6",
"\u12d8"-"\u12ee",
"\u12f0"-"\u130e",
"\u1310",
"\u1312"-"\u1315",
"\u1318"-"\u131e",
"\u1320"-"\u1346",
"\u1348"-"\u135a",
"\u13a0"-"\u13f4",
"\u1401"-"\u166c",
"\u166f"-"\u1676",
"\u1681"-"\u169a",
"\u16a0"-"\u16ea",
"\u1780"-"\u17b3",
"\u17db",
"\u1820"-"\u1877",
"\u1880"-"\u18a8",
"\u1e00"-"\u1e9b",
"\u1ea0"-"\u1ef9",
"\u1f00"-"\u1f15",
"\u1f18"-"\u1f1d",
"\u1f20"-"\u1f45",
"\u1f48"-"\u1f4d",
"\u1f50"-"\u1f57",
"\u1f59",
"\u1f5b",
"\u1f5d",
"\u1f5f"-"\u1f7d",
"\u1f80"-"\u1fb4",
"\u1fb6"-"\u1fbc",
"\u1fbe",
"\u1fc2"-"\u1fc4",
"\u1fc6"-"\u1fcc",
"\u1fd0"-"\u1fd3",
"\u1fd6"-"\u1fdb",
"\u1fe0"-"\u1fec",
"\u1ff2"-"\u1ff4",
"\u1ff6"-"\u1ffc",
"\u203f"-"\u2040",
"\u207f",
"\u20a0"-"\u20af",
"\u2102",
"\u2107",
"\u210a"-"\u2113",
"\u2115",
"\u2119"-"\u211d",
"\u2124",
"\u2126",
"\u2128",
"\u212a"-"\u212d",
"\u212f"-"\u2131",
"\u2133"-"\u2139",
"\u2160"-"\u2183",
"\u3005"-"\u3007",
"\u3021"-"\u3029",
"\u3031"-"\u3035",
"\u3038"-"\u303a",
"\u3041"-"\u3094",
"\u309d"-"\u309e",
"\u30a1"-"\u30fe",
"\u3105"-"\u312c",
"\u3131"-"\u318e",
"\u31a0"-"\u31b7",
"\u3400"-"\u4db5",
"\u4e00"-"\u9fa5",
"\ua000"-"\ua48c",
"\uac00"-"\ud7a3",
"\uf900"-"\ufa2d",
"\ufb00"-"\ufb06",
"\ufb13"-"\ufb17",
"\ufb1d",
"\ufb1f"-"\ufb28",
"\ufb2a"-"\ufb36",
"\ufb38"-"\ufb3c",
"\ufb3e",
"\ufb40"-"\ufb41",
"\ufb43"-"\ufb44",
"\ufb46"-"\ufbb1",
"\ufbd3"-"\ufd3d",
"\ufd50"-"\ufd8f",
"\ufd92"-"\ufdc7",
"\ufdf0"-"\ufdfb",
"\ufe33"-"\ufe34",
"\ufe4d"-"\ufe4f",
"\ufe69",
"\ufe70"-"\ufe72",
"\ufe74",
"\ufe76"-"\ufefc",
"\uff04",
"\uff21"-"\uff3a",
"\uff3f",
"\uff41"-"\uff5a",
"\uff65"-"\uffbe",
"\uffc2"-"\uffc7",
"\uffca"-"\uffcf",
"\uffd2"-"\uffd7",
"\uffda"-"\uffdc",
"\uffe0"-"\uffe1",
"\uffe5"-"\uffe6"
]
>
|
< #PART_LETTER:
[ // all chars for which Character.isIdentifierPart is true
"\u0000"-"\u0008",
"\u000e"-"\u001b",
"0"-"9",
"A"-"Z",
"_",
"a"-"z",
"\u007f"-"\u009f",
"\u00a2"-"\u00a5",
"\u00aa",
"\u00b5",
"\u00ba",
"\u00c0"-"\u00d6",
"\u00d8"-"\u00f6",
"\u00f8"-"\u021f",
"\u0222"-"\u0233",
"\u0250"-"\u02ad",
"\u02b0"-"\u02b8",
"\u02bb"-"\u02c1",
"\u02d0"-"\u02d1",
"\u02e0"-"\u02e4",
"\u02ee",
"\u0300"-"\u034e",
"\u0360"-"\u0362",
"\u037a",
"\u0386",
"\u0388"-"\u038a",
"\u038c",
"\u038e"-"\u03a1",
"\u03a3"-"\u03ce",
"\u03d0"-"\u03d7",
"\u03da"-"\u03f3",
"\u0400"-"\u0481",
"\u0483"-"\u0486",
"\u048c"-"\u04c4",
"\u04c7"-"\u04c8",
"\u04cb"-"\u04cc",
"\u04d0"-"\u04f5",
"\u04f8"-"\u04f9",
"\u0531"-"\u0556",
"\u0559",
"\u0561"-"\u0587",
"\u0591"-"\u05a1",
"\u05a3"-"\u05b9",
"\u05bb"-"\u05bd",
"\u05bf",
"\u05c1"-"\u05c2",
"\u05c4",
"\u05d0"-"\u05ea",
"\u05f0"-"\u05f2",
"\u0621"-"\u063a",
"\u0640"-"\u0655",
"\u0660"-"\u0669",
"\u0670"-"\u06d3",
"\u06d5"-"\u06dc",
"\u06df"-"\u06e8",
"\u06ea"-"\u06ed",
"\u06f0"-"\u06fc",
"\u070f"-"\u072c",
"\u0730"-"\u074a",
"\u0780"-"\u07b0",
"\u0901"-"\u0903",
"\u0905"-"\u0939",
"\u093c"-"\u094d",
"\u0950"-"\u0954",
"\u0958"-"\u0963",
"\u0966"-"\u096f",
"\u0981"-"\u0983",
"\u0985"-"\u098c",
"\u098f"-"\u0990",
"\u0993"-"\u09a8",
"\u09aa"-"\u09b0",
"\u09b2",
"\u09b6"-"\u09b9",
"\u09bc",
"\u09be"-"\u09c4",
"\u09c7"-"\u09c8",
"\u09cb"-"\u09cd",
"\u09d7",
"\u09dc"-"\u09dd",
"\u09df"-"\u09e3",
"\u09e6"-"\u09f3",
"\u0a02",
"\u0a05"-"\u0a0a",
"\u0a0f"-"\u0a10",
"\u0a13"-"\u0a28",
"\u0a2a"-"\u0a30",
"\u0a32"-"\u0a33",
"\u0a35"-"\u0a36",
"\u0a38"-"\u0a39",
"\u0a3c",
"\u0a3e"-"\u0a42",
"\u0a47"-"\u0a48",
"\u0a4b"-"\u0a4d",
"\u0a59"-"\u0a5c",
"\u0a5e",
"\u0a66"-"\u0a74",
"\u0a81"-"\u0a83",
"\u0a85"-"\u0a8b",
"\u0a8d",
"\u0a8f"-"\u0a91",
"\u0a93"-"\u0aa8",
"\u0aaa"-"\u0ab0",
"\u0ab2"-"\u0ab3",
"\u0ab5"-"\u0ab9",
"\u0abc"-"\u0ac5",
"\u0ac7"-"\u0ac9",
"\u0acb"-"\u0acd",
"\u0ad0",
"\u0ae0",
"\u0ae6"-"\u0aef",
"\u0b01"-"\u0b03",
"\u0b05"-"\u0b0c",
"\u0b0f"-"\u0b10",
"\u0b13"-"\u0b28",
"\u0b2a"-"\u0b30",
"\u0b32"-"\u0b33",
"\u0b36"-"\u0b39",
"\u0b3c"-"\u0b43",
"\u0b47"-"\u0b48",
"\u0b4b"-"\u0b4d",
"\u0b56"-"\u0b57",
"\u0b5c"-"\u0b5d",
"\u0b5f"-"\u0b61",
"\u0b66"-"\u0b6f",
"\u0b82"-"\u0b83",
"\u0b85"-"\u0b8a",
"\u0b8e"-"\u0b90",
"\u0b92"-"\u0b95",
"\u0b99"-"\u0b9a",
"\u0b9c",
"\u0b9e"-"\u0b9f",
"\u0ba3"-"\u0ba4",
"\u0ba8"-"\u0baa",
"\u0bae"-"\u0bb5",
"\u0bb7"-"\u0bb9",
"\u0bbe"-"\u0bc2",
"\u0bc6"-"\u0bc8",
"\u0bca"-"\u0bcd",
"\u0bd7",
"\u0be7"-"\u0bef",
"\u0c01"-"\u0c03",
"\u0c05"-"\u0c0c",
"\u0c0e"-"\u0c10",
"\u0c12"-"\u0c28",
"\u0c2a"-"\u0c33",
"\u0c35"-"\u0c39",
"\u0c3e"-"\u0c44",
"\u0c46"-"\u0c48",
"\u0c4a"-"\u0c4d",
"\u0c55"-"\u0c56",
"\u0c60"-"\u0c61",
"\u0c66"-"\u0c6f",
"\u0c82"-"\u0c83",
"\u0c85"-"\u0c8c",
"\u0c8e"-"\u0c90",
"\u0c92"-"\u0ca8",
"\u0caa"-"\u0cb3",
"\u0cb5"-"\u0cb9",
"\u0cbe"-"\u0cc4",
"\u0cc6"-"\u0cc8",
"\u0cca"-"\u0ccd",
"\u0cd5"-"\u0cd6",
"\u0cde",
"\u0ce0"-"\u0ce1",
"\u0ce6"-"\u0cef",
"\u0d02"-"\u0d03",
"\u0d05"-"\u0d0c",
"\u0d0e"-"\u0d10",
"\u0d12"-"\u0d28",
"\u0d2a"-"\u0d39",
"\u0d3e"-"\u0d43",
"\u0d46"-"\u0d48",
"\u0d4a"-"\u0d4d",
"\u0d57",
"\u0d60"-"\u0d61",
"\u0d66"-"\u0d6f",
"\u0d82"-"\u0d83",
"\u0d85"-"\u0d96",
"\u0d9a"-"\u0db1",
"\u0db3"-"\u0dbb",
"\u0dbd",
"\u0dc0"-"\u0dc6",
"\u0dca",
"\u0dcf"-"\u0dd4",
"\u0dd6",
"\u0dd8"-"\u0ddf",
"\u0df2"-"\u0df3",
"\u0e01"-"\u0e3a",
"\u0e3f"-"\u0e4e",
"\u0e50"-"\u0e59",
"\u0e81"-"\u0e82",
"\u0e84",
"\u0e87"-"\u0e88",
"\u0e8a",
"\u0e8d",
"\u0e94"-"\u0e97",
"\u0e99"-"\u0e9f",
"\u0ea1"-"\u0ea3",
"\u0ea5",
"\u0ea7",
"\u0eaa"-"\u0eab",
"\u0ead"-"\u0eb9",
"\u0ebb"-"\u0ebd",
"\u0ec0"-"\u0ec4",
"\u0ec6",
"\u0ec8"-"\u0ecd",
"\u0ed0"-"\u0ed9",
"\u0edc"-"\u0edd",
"\u0f00",
"\u0f18"-"\u0f19",
"\u0f20"-"\u0f29",
"\u0f35",
"\u0f37",
"\u0f39",
"\u0f3e"-"\u0f47",
"\u0f49"-"\u0f6a",
"\u0f71"-"\u0f84",
"\u0f86"-"\u0f8b",
"\u0f90"-"\u0f97",
"\u0f99"-"\u0fbc",
"\u0fc6",
"\u1000"-"\u1021",
"\u1023"-"\u1027",
"\u1029"-"\u102a",
"\u102c"-"\u1032",
"\u1036"-"\u1039",
"\u1040"-"\u1049",
"\u1050"-"\u1059",
"\u10a0"-"\u10c5",
"\u10d0"-"\u10f6",
"\u1100"-"\u1159",
"\u115f"-"\u11a2",
"\u11a8"-"\u11f9",
"\u1200"-"\u1206",
"\u1208"-"\u1246",
"\u1248",
"\u124a"-"\u124d",
"\u1250"-"\u1256",
"\u1258",
"\u125a"-"\u125d",
"\u1260"-"\u1286",
"\u1288",
"\u128a"-"\u128d",
"\u1290"-"\u12ae",
"\u12b0",
"\u12b2"-"\u12b5",
"\u12b8"-"\u12be",
"\u12c0",
"\u12c2"-"\u12c5",
"\u12c8"-"\u12ce",
"\u12d0"-"\u12d6",
"\u12d8"-"\u12ee",
"\u12f0"-"\u130e",
"\u1310",
"\u1312"-"\u1315",
"\u1318"-"\u131e",
"\u1320"-"\u1346",
"\u1348"-"\u135a",
"\u1369"-"\u1371",
"\u13a0"-"\u13f4",
"\u1401"-"\u166c",
"\u166f"-"\u1676",
"\u1681"-"\u169a",
"\u16a0"-"\u16ea",
"\u1780"-"\u17d3",
"\u17db",
"\u17e0"-"\u17e9",
"\u180b"-"\u180e",
"\u1810"-"\u1819",
"\u1820"-"\u1877",
"\u1880"-"\u18a9",
"\u1e00"-"\u1e9b",
"\u1ea0"-"\u1ef9",
"\u1f00"-"\u1f15",
"\u1f18"-"\u1f1d",
"\u1f20"-"\u1f45",
"\u1f48"-"\u1f4d",
"\u1f50"-"\u1f57",
"\u1f59",
"\u1f5b",
"\u1f5d",
"\u1f5f"-"\u1f7d",
"\u1f80"-"\u1fb4",
"\u1fb6"-"\u1fbc",
"\u1fbe",
"\u1fc2"-"\u1fc4",
"\u1fc6"-"\u1fcc",
"\u1fd0"-"\u1fd3",
"\u1fd6"-"\u1fdb",
"\u1fe0"-"\u1fec",
"\u1ff2"-"\u1ff4",
"\u1ff6"-"\u1ffc",
"\u200c"-"\u200f",
"\u202a"-"\u202e",
"\u203f"-"\u2040",
"\u206a"-"\u206f",
"\u207f",
"\u20a0"-"\u20af",
"\u20d0"-"\u20dc",
"\u20e1",
"\u2102",
"\u2107",
"\u210a"-"\u2113",
"\u2115",
"\u2119"-"\u211d",
"\u2124",
"\u2126",
"\u2128",
"\u212a"-"\u212d",
"\u212f"-"\u2131",
"\u2133"-"\u2139",
"\u2160"-"\u2183",
"\u3005"-"\u3007",
"\u3021"-"\u302f",
"\u3031"-"\u3035",
"\u3038"-"\u303a",
"\u3041"-"\u3094",
"\u3099"-"\u309a",
"\u309d"-"\u309e",
"\u30a1"-"\u30fe",
"\u3105"-"\u312c",
"\u3131"-"\u318e",
"\u31a0"-"\u31b7",
"\u3400"-"\u4db5",
"\u4e00"-"\u9fa5",
"\ua000"-"\ua48c",
"\uac00"-"\ud7a3",
"\uf900"-"\ufa2d",
"\ufb00"-"\ufb06",
"\ufb13"-"\ufb17",
"\ufb1d"-"\ufb28",
"\ufb2a"-"\ufb36",
"\ufb38"-"\ufb3c",
"\ufb3e",
"\ufb40"-"\ufb41",
"\ufb43"-"\ufb44",
"\ufb46"-"\ufbb1",
"\ufbd3"-"\ufd3d",
"\ufd50"-"\ufd8f",
"\ufd92"-"\ufdc7",
"\ufdf0"-"\ufdfb",
"\ufe20"-"\ufe23",
"\ufe33"-"\ufe34",
"\ufe4d"-"\ufe4f",
"\ufe69",
"\ufe70"-"\ufe72",
"\ufe74",
"\ufe76"-"\ufefc",
"\ufeff",
"\uff04",
"\uff10"-"\uff19",
"\uff21"-"\uff3a",
"\uff3f",
"\uff41"-"\uff5a",
"\uff65"-"\uffbe",
"\uffc2"-"\uffc7",
"\uffca"-"\uffcf",
"\uffd2"-"\uffd7",
"\uffda"-"\uffdc",
"\uffe0"-"\uffe1",
"\uffe5"-"\uffe6",
"\ufff9"-"\ufffb"
]
>
}
TOKEN :
{
< ARROW_LINE: ["\u002d", "\u00ad", "\u2010", "\u2011", "\u2012", "\u2013", "\u2014", "\u2015", "\ufe58", "\ufe63", "\uff0d"] >
| < ARROW_LEFT_HEAD: ["\u27e8", "\u3008", "\ufe64", "\uff1c"] >
| < ARROW_RIGHT_HEAD: ["\u27e9", "\u3009", "\ufe65", "\uff1e"] >
}
<*> TOKEN : { }
/** Root production. */
List Statements() throws Exception :
{
STATEMENT x;
List stmts = new ArrayList<>();
}
{
try {
x=Statement() { stmts.add(x); }
( LOOKAHEAD(2) ";" x=Statement() { stmts.add(x); } )* ( LOOKAHEAD(2) ";" )?
{ return stmts; }
} catch (ParseException e) {
Token t = e.currentToken.next;
if (e.getMessage().contains( "Encountered \"\"" )) {
throw exceptionFactory.syntaxException(t.image, ParseExceptions.expected(e.expectedTokenSequences, e.tokenImage), e,
t.endOffset + 1, t.endLine, t.endColumn + 1);
} else {
throw exceptionFactory.syntaxException(t.image, ParseExceptions.expected(e.expectedTokenSequences, e.tokenImage), e,
t.beginOffset, t.beginLine, t.beginColumn);
}
} catch (InvalidUnicodeLiteral e) {
throw exceptionFactory.syntaxException(e, e.offset, e.line, e.column);
}
}
STATEMENT Statement() :
{
STATEMENT statement;
USE_CLAUSE useClause = null;
}
{
(
statement=PeriodicCommitQuery()
| ( useClause = UseClause() )? statement=SingleQueryOrAdministrationCommand(useClause)
)
{
return statement;
}
}
STATEMENT SingleQueryOrAdministrationCommand(USE_CLAUSE useClause):
{
STATEMENT statement = null;
QUERY query = null;
}
{
(
LOOKAHEAD(2) statement=CreateAdministrationCommand(useClause)
| statement=AdministrationCommand(useClause)
| query=SingleQuery(useClause) ( query=Union(query) )*
)
{
if (query != null) {
return query;
}
return statement;
}
}
QUERY PeriodicCommitQuery() :
{
Token t;
Token batchSize = null;
CLAUSE loadCsv;
List queryBody;
}
{
t= ( batchSize= )?
loadCsv=LoadCSVClause()
queryBody=PeriodicCommitQueryBody()
{ return astFactory.periodicCommitQuery(pos(t), batchSize == null ? null : batchSize.image, loadCsv, queryBody); }
}
List PeriodicCommitQueryBody() :
{
CLAUSE x;
List clauses = new ArrayList<>();
}
{
( x=Clause() { clauses.add(x); } )*
{ return clauses; }
}
QUERY RegularQuery() :
{QUERY x;}
{
x=SingleQuery(null) ( x=Union(x) )*
{ return x; }
}
QUERY Union(QUERY lhs) :
{
Token t;
QUERY rhs;
boolean all = false;
}
{
t= ( { all = true; } )? rhs=SingleQuery(null)
{ return astFactory.newUnion(pos(t), lhs, rhs, all); }
}
QUERY SingleQuery(CLAUSE useClause) :
{
CLAUSE x;
List clauses = new ArrayList<>();
if (useClause != null) {
clauses.add(useClause);
}
}
{
( x=Clause() { clauses.add(x); } )+
{ return astFactory.newSingleQuery(clauses); }
}
CLAUSE Clause() :
{CLAUSE x = null;}
{
(
x=FromClause()
| x=UseClause()
| x=ReturnClause()
| x=CreateClause() // because create index/constraint
| x=DeleteClause()
| x=SetClause()
| x=RemoveClause()
| x=MatchClause()
| x=MergeClause()
| x=WithClause()
| x=UnwindClause()
| LOOKAHEAD(2) x=CallClause() // because subqueries also start with CALL
| x=SubqueryClause()
| x=LoadCSVClause()
| x=ForeachClause()
)
{ return x; }
}
// FROM & USE
CLAUSE FromClause() :
{
Token t;
EXPRESSION e;
}
{
t= ( LOOKAHEAD(2) )? e=Expression()
{ return astFactory.fromClause(pos(t), e); }
}
USE_CLAUSE UseClause() :
{
Token t;
EXPRESSION e;
}
{
t=