From a22a49613a7b5f9464a2550b9316fc7b9182086e Mon Sep 17 00:00:00 2001 From: Simon Bin Date: Fri, 3 Feb 2023 21:31:47 +0100 Subject: [PATCH] sparql lateral --- packages/yasqe/grammar/_tokenizer-table.js | 22 ++++++++++++++++++- packages/yasqe/grammar/sparql11-grammar.pl | 3 +++ .../yasqe/grammar/sparqljs-browser-min.js | 20 ++++++++++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/packages/yasqe/grammar/_tokenizer-table.js b/packages/yasqe/grammar/_tokenizer-table.js index 36c9090d..26966f2f 100644 --- a/packages/yasqe/grammar/_tokenizer-table.js +++ b/packages/yasqe/grammar/_tokenizer-table.js @@ -19,6 +19,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -36,6 +37,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -78,6 +80,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -94,6 +97,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -130,6 +134,7 @@ module.exports = { ".": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -141,6 +146,7 @@ module.exports = { "*[graphPatternNotTriples,?.,?triplesBlock]": { "{": ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], OPTIONAL: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], + LATERAL: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], MINUS: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], GRAPH: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], SERVICE: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], @@ -907,6 +913,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1058,6 +1065,7 @@ module.exports = { ".": ["[.,?triplesBlock]"], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1103,6 +1111,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1146,6 +1155,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1315,6 +1325,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1449,6 +1460,7 @@ module.exports = { DOUBLE_NEGATIVE: ["triplesBlock"], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1615,6 +1627,7 @@ module.exports = { "[graphPatternNotTriples,?.,?triplesBlock]": { "{": ["graphPatternNotTriples", "?.", "?triplesBlock"], OPTIONAL: ["graphPatternNotTriples", "?.", "?triplesBlock"], + LATERAL: ["graphPatternNotTriples", "?.", "?triplesBlock"], MINUS: ["graphPatternNotTriples", "?.", "?triplesBlock"], GRAPH: ["graphPatternNotTriples", "?.", "?triplesBlock"], SERVICE: ["graphPatternNotTriples", "?.", "?triplesBlock"], @@ -2714,6 +2727,7 @@ module.exports = { graphPatternNotTriples: { "{": ["groupOrUnionGraphPattern"], OPTIONAL: ["optionalGraphPattern"], + LATERAL: ["lateralGraphPattern"], MINUS: ["minusGraphPattern"], GRAPH: ["graphGraphPattern"], SERVICE: ["serviceGraphPattern"], @@ -2824,6 +2838,7 @@ module.exports = { groupGraphPatternSub: { "{": ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], OPTIONAL: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], + LATERAL: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], MINUS: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], GRAPH: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], SERVICE: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], @@ -3300,6 +3315,9 @@ module.exports = { optionalGraphPattern: { OPTIONAL: ["OPTIONAL", "groupGraphPattern"] }, + lateralGraphPattern: { + LATERAL: ["LATERAL", "groupGraphPattern"] + }, "or([*,expression])": { "*": ["*"], "!": ["expression"], @@ -3542,6 +3560,7 @@ module.exports = { SELECT: ["subSelect"], "{": ["groupGraphPatternSub"], OPTIONAL: ["groupGraphPatternSub"], + LATERAL: ["groupGraphPatternSub"], MINUS: ["groupGraphPatternSub"], GRAPH: ["groupGraphPatternSub"], SERVICE: ["groupGraphPatternSub"], @@ -3874,6 +3893,7 @@ module.exports = { ".": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -4761,7 +4781,7 @@ module.exports = { } }, - keywords: /^(GROUP_CONCAT|DATATYPE|BASE|PREFIX|SELECT|CONSTRUCT|DESCRIBE|ASK|FROM|NAMED|ORDER|BY|LIMIT|ASC|DESC|OFFSET|DISTINCT|REDUCED|WHERE|GRAPH|OPTIONAL|UNION|FILTER|GROUP|HAVING|AS|VALUES|LOAD|CLEAR|DROP|CREATE|MOVE|COPY|SILENT|INSERT|DELETE|DATA|WITH|TO|USING|NAMED|MINUS|BIND|LANGMATCHES|LANG|BOUND|SAMETERM|ISIRI|ISURI|ISBLANK|ISLITERAL|REGEX|TRUE|FALSE|UNDEF|ADD|DEFAULT|ALL|SERVICE|INTO|IN|NOT|IRI|URI|BNODE|RAND|ABS|CEIL|FLOOR|ROUND|CONCAT|STRLEN|UCASE|LCASE|ENCODE_FOR_URI|CONTAINS|STRSTARTS|STRENDS|STRBEFORE|STRAFTER|YEAR|MONTH|DAY|HOURS|MINUTES|SECONDS|TIMEZONE|TZ|NOW|UUID|STRUUID|MD5|SHA1|SHA256|SHA384|SHA512|COALESCE|IF|STRLANG|STRDT|ISNUMERIC|SUBSTR|REPLACE|EXISTS|COUNT|SUM|MIN|MAX|AVG|SAMPLE|SEPARATOR|STR)/i, + keywords: /^(GROUP_CONCAT|DATATYPE|BASE|PREFIX|SELECT|CONSTRUCT|DESCRIBE|ASK|FROM|NAMED|ORDER|BY|LIMIT|ASC|DESC|OFFSET|DISTINCT|REDUCED|WHERE|GRAPH|OPTIONAL|LATERAL|UNION|FILTER|GROUP|HAVING|AS|VALUES|LOAD|CLEAR|DROP|CREATE|MOVE|COPY|SILENT|INSERT|DELETE|DATA|WITH|TO|USING|NAMED|MINUS|BIND|LANGMATCHES|LANG|BOUND|SAMETERM|ISIRI|ISURI|ISBLANK|ISLITERAL|REGEX|TRUE|FALSE|UNDEF|ADD|DEFAULT|ALL|SERVICE|INTO|IN|NOT|IRI|URI|BNODE|RAND|ABS|CEIL|FLOOR|ROUND|CONCAT|STRLEN|UCASE|LCASE|ENCODE_FOR_URI|CONTAINS|STRSTARTS|STRENDS|STRBEFORE|STRAFTER|YEAR|MONTH|DAY|HOURS|MINUTES|SECONDS|TIMEZONE|TZ|NOW|UUID|STRUUID|MD5|SHA1|SHA256|SHA384|SHA512|COALESCE|IF|STRLANG|STRDT|ISNUMERIC|SUBSTR|REPLACE|EXISTS|COUNT|SUM|MIN|MAX|AVG|SAMPLE|SEPARATOR|STR)/i, punct: /^(\*|a|\.|\{|\}|,|\(|\)|;|\[|\]|\|\||&&|=|!=|!|<=|>=|<|>|\+|-|\/|\^\^|\?|\||\^)/, diff --git a/packages/yasqe/grammar/sparql11-grammar.pl b/packages/yasqe/grammar/sparql11-grammar.pl index 8f3681e6..d4d5ee3b 100644 --- a/packages/yasqe/grammar/sparql11-grammar.pl +++ b/packages/yasqe/grammar/sparql11-grammar.pl @@ -269,6 +269,7 @@ %[56] graphPatternNotTriples ==> [groupOrUnionGraphPattern]. graphPatternNotTriples ==> [optionalGraphPattern]. +graphPatternNotTriples ==> [lateralGraphPattern]. graphPatternNotTriples ==> [minusGraphPattern]. graphPatternNotTriples ==> [graphGraphPattern]. graphPatternNotTriples ==> [serviceGraphPattern]. @@ -277,6 +278,7 @@ graphPatternNotTriples ==> [inlineData]. %[57] optionalGraphPattern ==> ['OPTIONAL',groupGraphPattern]. +lateralGraphPattern ==> ['LATERAL',groupGraphPattern]. %[58] graphGraphPattern ==> ['GRAPH',varOrIRIref,groupGraphPattern]. @@ -700,6 +702,7 @@ 'WHERE', 'GRAPH', 'OPTIONAL', +'LATERAL', 'UNION', 'FILTER', 'GROUP', diff --git a/packages/yasqe/grammar/sparqljs-browser-min.js b/packages/yasqe/grammar/sparqljs-browser-min.js index 56d3073a..bf6932f5 100644 --- a/packages/yasqe/grammar/sparqljs-browser-min.js +++ b/packages/yasqe/grammar/sparqljs-browser-min.js @@ -16,6 +16,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -33,6 +34,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -75,6 +77,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -91,6 +94,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -127,6 +131,7 @@ module.exports = { ".": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -138,6 +143,7 @@ module.exports = { "*[graphPatternNotTriples,?.,?triplesBlock]": { "{": ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], OPTIONAL: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], + LATERAL: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], MINUS: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], GRAPH: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], SERVICE: ["[graphPatternNotTriples,?.,?triplesBlock]", "*[graphPatternNotTriples,?.,?triplesBlock]"], @@ -897,6 +903,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1031,6 +1038,7 @@ module.exports = { ".": ["[.,?triplesBlock]"], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1063,6 +1071,7 @@ module.exports = { "]": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1106,6 +1115,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1261,6 +1271,7 @@ module.exports = { GRAPH: [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], SERVICE: [], FILTER: [], @@ -1395,6 +1406,7 @@ module.exports = { DOUBLE_NEGATIVE: ["triplesBlock"], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -1493,6 +1505,7 @@ module.exports = { "[graphPatternNotTriples,?.,?triplesBlock]": { "{": ["graphPatternNotTriples", "?.", "?triplesBlock"], OPTIONAL: ["graphPatternNotTriples", "?.", "?triplesBlock"], + LATERAL: ["graphPatternNotTriples", "?.", "?triplesBlock"], MINUS: ["graphPatternNotTriples", "?.", "?triplesBlock"], GRAPH: ["graphPatternNotTriples", "?.", "?triplesBlock"], SERVICE: ["graphPatternNotTriples", "?.", "?triplesBlock"], @@ -2546,6 +2559,7 @@ module.exports = { graphPatternNotTriples: { "{": ["groupOrUnionGraphPattern"], OPTIONAL: ["optionalGraphPattern"], + LATERAL: ["optionalGraphPattern"], MINUS: ["minusGraphPattern"], GRAPH: ["graphGraphPattern"], SERVICE: ["serviceGraphPattern"], @@ -2652,6 +2666,7 @@ module.exports = { groupGraphPatternSub: { "{": ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], OPTIONAL: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], + LATERAL: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], MINUS: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], GRAPH: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], SERVICE: ["?triplesBlock", "*[graphPatternNotTriples,?.,?triplesBlock]"], @@ -3106,6 +3121,7 @@ module.exports = { }, offsetClause: { OFFSET: ["OFFSET", "INTEGER"] }, optionalGraphPattern: { OPTIONAL: ["OPTIONAL", "groupGraphPattern"] }, + lateralGraphPattern: { LATERAL: ["LATERAL", "groupGraphPattern"] }, "or([*,expression])": { "*": ["*"], "!": ["expression"], @@ -3333,6 +3349,7 @@ module.exports = { SELECT: ["subSelect"], "{": ["groupGraphPatternSub"], OPTIONAL: ["groupGraphPatternSub"], + LATERAL: ["groupGraphPatternSub"], MINUS: ["groupGraphPatternSub"], GRAPH: ["groupGraphPatternSub"], SERVICE: ["groupGraphPatternSub"], @@ -3655,6 +3672,7 @@ module.exports = { ".": [], "{": [], OPTIONAL: [], + LATERAL: [], MINUS: [], GRAPH: [], SERVICE: [], @@ -4522,7 +4540,7 @@ module.exports = { WHERE: ["?WHERE", "groupGraphPattern"] } }, - keywords: /^(GROUP_CONCAT|DATATYPE|BASE|PREFIX|SELECT|CONSTRUCT|DESCRIBE|ASK|FROM|NAMED|ORDER|BY|LIMIT|ASC|DESC|OFFSET|DISTINCT|REDUCED|WHERE|GRAPH|OPTIONAL|UNION|FILTER|GROUP|HAVING|AS|VALUES|LOAD|CLEAR|DROP|CREATE|MOVE|COPY|SILENT|INSERT|DELETE|DATA|WITH|TO|USING|NAMED|MINUS|BIND|LANGMATCHES|LANG|BOUND|SAMETERM|ISIRI|ISURI|ISBLANK|ISLITERAL|REGEX|TRUE|FALSE|UNDEF|ADD|DEFAULT|ALL|SERVICE|INTO|IN|NOT|IRI|URI|BNODE|RAND|ABS|CEIL|FLOOR|ROUND|CONCAT|STRLEN|UCASE|LCASE|ENCODE_FOR_URI|CONTAINS|STRSTARTS|STRENDS|STRBEFORE|STRAFTER|YEAR|MONTH|DAY|HOURS|MINUTES|SECONDS|TIMEZONE|TZ|NOW|UUID|STRUUID|MD5|SHA1|SHA256|SHA384|SHA512|COALESCE|IF|STRLANG|STRDT|ISNUMERIC|SUBSTR|REPLACE|EXISTS|COUNT|SUM|MIN|MAX|AVG|SAMPLE|SEPARATOR|STR)/i, + keywords: /^(GROUP_CONCAT|DATATYPE|BASE|PREFIX|SELECT|CONSTRUCT|DESCRIBE|ASK|FROM|NAMED|ORDER|BY|LIMIT|ASC|DESC|OFFSET|DISTINCT|REDUCED|WHERE|GRAPH|OPTIONAL|LATERAL|UNION|FILTER|GROUP|HAVING|AS|VALUES|LOAD|CLEAR|DROP|CREATE|MOVE|COPY|SILENT|INSERT|DELETE|DATA|WITH|TO|USING|NAMED|MINUS|BIND|LANGMATCHES|LANG|BOUND|SAMETERM|ISIRI|ISURI|ISBLANK|ISLITERAL|REGEX|TRUE|FALSE|UNDEF|ADD|DEFAULT|ALL|SERVICE|INTO|IN|NOT|IRI|URI|BNODE|RAND|ABS|CEIL|FLOOR|ROUND|CONCAT|STRLEN|UCASE|LCASE|ENCODE_FOR_URI|CONTAINS|STRSTARTS|STRENDS|STRBEFORE|STRAFTER|YEAR|MONTH|DAY|HOURS|MINUTES|SECONDS|TIMEZONE|TZ|NOW|UUID|STRUUID|MD5|SHA1|SHA256|SHA384|SHA512|COALESCE|IF|STRLANG|STRDT|ISNUMERIC|SUBSTR|REPLACE|EXISTS|COUNT|SUM|MIN|MAX|AVG|SAMPLE|SEPARATOR|STR)/i, punct: /^(\*|a|\.|\{|\}|,|\(|\)|;|\[|\]|\|\||&&|=|!=|!|<=|>=|<|>|\+|-|\/|\^\^|\?|\||\^)/, startSymbol: "sparql11", acceptEmpty: !0