@traqula/rules-sparql-1-1 0.0.1-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +22 -0
- package/README.md +17 -0
- package/lib/RoundTripTypes.d.ts +379 -0
- package/lib/RoundTripTypes.js +2 -0
- package/lib/RoundTripTypes.js.map +1 -0
- package/lib/Sparql11types.d.ts +68 -0
- package/lib/Sparql11types.js +2 -0
- package/lib/Sparql11types.js.map +1 -0
- package/lib/SparqlParser.d.ts +23 -0
- package/lib/SparqlParser.js +32 -0
- package/lib/SparqlParser.js.map +1 -0
- package/lib/expressionHelpers.d.ts +45 -0
- package/lib/expressionHelpers.js +161 -0
- package/lib/expressionHelpers.js.map +1 -0
- package/lib/factory.d.ts +447 -0
- package/lib/factory.js +105 -0
- package/lib/factory.js.map +1 -0
- package/lib/factoryMixins/ContextFactory.d.ts +38 -0
- package/lib/factoryMixins/ContextFactory.js +30 -0
- package/lib/factoryMixins/ContextFactory.js.map +1 -0
- package/lib/factoryMixins/ExpressionFactory.d.ts +60 -0
- package/lib/factoryMixins/ExpressionFactory.js +83 -0
- package/lib/factoryMixins/ExpressionFactory.js.map +1 -0
- package/lib/factoryMixins/GraphRefFactory.d.ts +43 -0
- package/lib/factoryMixins/GraphRefFactory.js +51 -0
- package/lib/factoryMixins/GraphRefFactory.js.map +1 -0
- package/lib/factoryMixins/PathFactory.d.ts +51 -0
- package/lib/factoryMixins/PathFactory.js +68 -0
- package/lib/factoryMixins/PathFactory.js.map +1 -0
- package/lib/factoryMixins/Patternfactory.d.ts +55 -0
- package/lib/factoryMixins/Patternfactory.js +98 -0
- package/lib/factoryMixins/Patternfactory.js.map +1 -0
- package/lib/factoryMixins/QueryFactory.d.ts +41 -0
- package/lib/factoryMixins/QueryFactory.js +43 -0
- package/lib/factoryMixins/QueryFactory.js.map +1 -0
- package/lib/factoryMixins/SolutionModifiersFactory.d.ts +43 -0
- package/lib/factoryMixins/SolutionModifiersFactory.js +55 -0
- package/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -0
- package/lib/factoryMixins/TermFactory.d.ts +76 -0
- package/lib/factoryMixins/TermFactory.js +84 -0
- package/lib/factoryMixins/TermFactory.js.map +1 -0
- package/lib/factoryMixins/UpdateOperationFactory.d.ts +68 -0
- package/lib/factoryMixins/UpdateOperationFactory.js +126 -0
- package/lib/factoryMixins/UpdateOperationFactory.js.map +1 -0
- package/lib/factoryMixins/mixins.d.ts +14 -0
- package/lib/factoryMixins/mixins.js +20 -0
- package/lib/factoryMixins/mixins.js.map +1 -0
- package/lib/grammar/builtIn.d.ts +89 -0
- package/lib/grammar/builtIn.js +247 -0
- package/lib/grammar/builtIn.js.map +1 -0
- package/lib/grammar/dataSetClause.d.ts +34 -0
- package/lib/grammar/dataSetClause.js +81 -0
- package/lib/grammar/dataSetClause.js.map +1 -0
- package/lib/grammar/expression.d.ts +63 -0
- package/lib/grammar/expression.js +383 -0
- package/lib/grammar/expression.js.map +1 -0
- package/lib/grammar/general.d.ts +36 -0
- package/lib/grammar/general.js +145 -0
- package/lib/grammar/general.js.map +1 -0
- package/lib/grammar/index.d.ts +12 -0
- package/lib/grammar/index.js +13 -0
- package/lib/grammar/index.js.map +1 -0
- package/lib/grammar/literals.d.ts +55 -0
- package/lib/grammar/literals.js +258 -0
- package/lib/grammar/literals.js.map +1 -0
- package/lib/grammar/propertyPaths.d.ts +43 -0
- package/lib/grammar/propertyPaths.js +182 -0
- package/lib/grammar/propertyPaths.js.map +1 -0
- package/lib/grammar/queryUnit/queryUnit.d.ts +48 -0
- package/lib/grammar/queryUnit/queryUnit.js +366 -0
- package/lib/grammar/queryUnit/queryUnit.js.map +1 -0
- package/lib/grammar/solutionModifier.d.ts +44 -0
- package/lib/grammar/solutionModifier.js +253 -0
- package/lib/grammar/solutionModifier.js.map +1 -0
- package/lib/grammar/tripleBlock.d.ts +36 -0
- package/lib/grammar/tripleBlock.js +357 -0
- package/lib/grammar/tripleBlock.js.map +1 -0
- package/lib/grammar/updateUnit/updateUnit.d.ts +95 -0
- package/lib/grammar/updateUnit/updateUnit.js +493 -0
- package/lib/grammar/updateUnit/updateUnit.js.map +1 -0
- package/lib/grammar/whereClause.d.ts +76 -0
- package/lib/grammar/whereClause.js +441 -0
- package/lib/grammar/whereClause.js.map +1 -0
- package/lib/grammar-helpers/utils.d.ts +12 -0
- package/lib/grammar-helpers/utils.js +16 -0
- package/lib/grammar-helpers/utils.js.map +1 -0
- package/lib/index.cjs +14565 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/lexer/BuildinCalls.d.ts +126 -0
- package/lib/lexer/BuildinCalls.js +188 -0
- package/lib/lexer/BuildinCalls.js.map +1 -0
- package/lib/lexer/graph.d.ts +6 -0
- package/lib/lexer/graph.js +8 -0
- package/lib/lexer/graph.js.map +1 -0
- package/lib/lexer/index.d.ts +5 -0
- package/lib/lexer/index.js +6 -0
- package/lib/lexer/index.js.map +1 -0
- package/lib/lexer/lexer.d.ts +54 -0
- package/lib/lexer/lexer.js +70 -0
- package/lib/lexer/lexer.js.map +1 -0
- package/lib/lexer/symbols.d.ts +28 -0
- package/lib/lexer/symbols.js +29 -0
- package/lib/lexer/symbols.js.map +1 -0
- package/lib/lexer/terminals.d.ts +26 -0
- package/lib/lexer/terminals.js +63 -0
- package/lib/lexer/terminals.js.map +1 -0
- package/lib/utils.d.ts +5 -0
- package/lib/utils.js +24 -0
- package/lib/utils.js.map +1 -0
- package/lib/validation/validators.d.ts +14 -0
- package/lib/validation/validators.js +235 -0
- package/lib/validation/validators.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ContextDefinition, ContextDefinitionBase, ContextDefinitionPrefix, GraphTerm, Term, TermIri, TermVariable } from '../RoundTripTypes';
|
|
2
|
+
import type { SparqlGrammarRule, SparqlRule } from '../Sparql11types';
|
|
3
|
+
/**
|
|
4
|
+
* [[4]](https://www.w3.org/TR/sparql11-query/#rPrologue)
|
|
5
|
+
*/
|
|
6
|
+
export declare const prologue: SparqlRule<'prologue', ContextDefinition[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Registers base IRI in the context and returns it.
|
|
9
|
+
* [[5]](https://www.w3.org/TR/sparql11-query/#rBaseDecl)
|
|
10
|
+
*/
|
|
11
|
+
export declare const baseDecl: SparqlRule<'baseDecl', ContextDefinitionBase>;
|
|
12
|
+
/**
|
|
13
|
+
* Registers prefix in the context and returns registered key-value-pair.
|
|
14
|
+
* [[6]](https://www.w3.org/TR/sparql11-query/#rPrefixDecl)
|
|
15
|
+
*/
|
|
16
|
+
export declare const prefixDecl: SparqlRule<'prefixDecl', ContextDefinitionPrefix>;
|
|
17
|
+
/**
|
|
18
|
+
* [[78]](https://www.w3.org/TR/sparql11-query/#rVerb)
|
|
19
|
+
*/
|
|
20
|
+
export declare const verb: SparqlGrammarRule<'verb', TermVariable | TermIri>;
|
|
21
|
+
/**
|
|
22
|
+
* [[106]](https://www.w3.org/TR/sparql11-query/#rVarOrTerm)
|
|
23
|
+
*/
|
|
24
|
+
export declare const varOrTerm: SparqlRule<'varOrTerm', Term>;
|
|
25
|
+
/**
|
|
26
|
+
* [[107]](https://www.w3.org/TR/sparql11-query/#rVarOrIri)
|
|
27
|
+
*/
|
|
28
|
+
export declare const varOrIri: SparqlGrammarRule<'varOrIri', TermIri | TermVariable>;
|
|
29
|
+
/**
|
|
30
|
+
* [[108]](https://www.w3.org/TR/sparql11-query/#rVar)
|
|
31
|
+
*/
|
|
32
|
+
export declare const var_: SparqlRule<'var', TermVariable>;
|
|
33
|
+
/**
|
|
34
|
+
* [[109]](https://www.w3.org/TR/sparql11-query/#rGraphTerm)
|
|
35
|
+
*/
|
|
36
|
+
export declare const graphTerm: SparqlRule<'graphTerm', GraphTerm>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { CommonIRIs } from '../grammar-helpers/utils';
|
|
2
|
+
import * as l from '../lexer';
|
|
3
|
+
import { blankNode, booleanLiteral, iri, iriFull, numericLiteral, rdfLiteral, verbA } from './literals';
|
|
4
|
+
/**
|
|
5
|
+
* [[4]](https://www.w3.org/TR/sparql11-query/#rPrologue)
|
|
6
|
+
*/
|
|
7
|
+
export const prologue = {
|
|
8
|
+
name: 'prologue',
|
|
9
|
+
impl: ({ SUBRULE, MANY, OR }) => () => {
|
|
10
|
+
const result = [];
|
|
11
|
+
MANY(() => OR([
|
|
12
|
+
{ ALT: () => result.push(SUBRULE(baseDecl, undefined)) },
|
|
13
|
+
// TODO: the [spec](https://www.w3.org/TR/sparql11-query/#iriRefs) says you cannot redefine prefixes.
|
|
14
|
+
// We might need to check this.
|
|
15
|
+
{ ALT: () => result.push(SUBRULE(prefixDecl, undefined)) },
|
|
16
|
+
]));
|
|
17
|
+
return result;
|
|
18
|
+
},
|
|
19
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {
|
|
20
|
+
for (const context of ast) {
|
|
21
|
+
if (F.isContextDefinitionBase(context)) {
|
|
22
|
+
SUBRULE(baseDecl, context, undefined);
|
|
23
|
+
}
|
|
24
|
+
else if (F.isContextDefinitionPrefix(context)) {
|
|
25
|
+
SUBRULE(prefixDecl, context, undefined);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Registers base IRI in the context and returns it.
|
|
32
|
+
* [[5]](https://www.w3.org/TR/sparql11-query/#rBaseDecl)
|
|
33
|
+
*/
|
|
34
|
+
export const baseDecl = {
|
|
35
|
+
name: 'baseDecl',
|
|
36
|
+
impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {
|
|
37
|
+
const base = CONSUME(l.baseDecl);
|
|
38
|
+
const val = SUBRULE(iriFull, undefined);
|
|
39
|
+
return ACTION(() => C.factory.contextDefinitionBase(C.factory.sourceLocation(base, val), val));
|
|
40
|
+
},
|
|
41
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
42
|
+
F.printFilter(ast, () => PRINT_WORD('BASE'));
|
|
43
|
+
SUBRULE(iri, ast.value, undefined);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Registers prefix in the context and returns registered key-value-pair.
|
|
48
|
+
* [[6]](https://www.w3.org/TR/sparql11-query/#rPrefixDecl)
|
|
49
|
+
*/
|
|
50
|
+
export const prefixDecl = {
|
|
51
|
+
name: 'prefixDecl',
|
|
52
|
+
impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {
|
|
53
|
+
const prefix = CONSUME(l.prefixDecl);
|
|
54
|
+
const name = CONSUME(l.terminals.pNameNs).image.slice(0, -1);
|
|
55
|
+
const value = SUBRULE(iriFull, undefined);
|
|
56
|
+
return ACTION(() => C.factory.contextDefinitionPrefix(C.factory.sourceLocation(prefix, value), name, value));
|
|
57
|
+
},
|
|
58
|
+
gImpl: ({ SUBRULE, PRINT_WORDS }) => (ast, { factory: F }) => {
|
|
59
|
+
F.printFilter(ast, () => {
|
|
60
|
+
PRINT_WORDS('PREFIX', `${ast.key}:`);
|
|
61
|
+
});
|
|
62
|
+
SUBRULE(iri, ast.value, undefined);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* [[78]](https://www.w3.org/TR/sparql11-query/#rVerb)
|
|
67
|
+
*/
|
|
68
|
+
export const verb = {
|
|
69
|
+
name: 'verb',
|
|
70
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
71
|
+
{ ALT: () => SUBRULE(varOrIri, undefined) },
|
|
72
|
+
{ ALT: () => SUBRULE(verbA, undefined) },
|
|
73
|
+
]),
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* [[106]](https://www.w3.org/TR/sparql11-query/#rVarOrTerm)
|
|
77
|
+
*/
|
|
78
|
+
export const varOrTerm = {
|
|
79
|
+
name: 'varOrTerm',
|
|
80
|
+
impl: ({ SUBRULE, OR }) => C => OR([
|
|
81
|
+
{ GATE: () => C.parseMode.has('canParseVars'), ALT: () => SUBRULE(var_, undefined) },
|
|
82
|
+
{ ALT: () => SUBRULE(graphTerm, undefined) },
|
|
83
|
+
]),
|
|
84
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {
|
|
85
|
+
if (F.isTermVariable(ast)) {
|
|
86
|
+
return SUBRULE(var_, ast, undefined);
|
|
87
|
+
}
|
|
88
|
+
return SUBRULE(graphTerm, ast, undefined);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* [[107]](https://www.w3.org/TR/sparql11-query/#rVarOrIri)
|
|
93
|
+
*/
|
|
94
|
+
export const varOrIri = {
|
|
95
|
+
name: 'varOrIri',
|
|
96
|
+
impl: ({ SUBRULE, OR }) => C => OR([
|
|
97
|
+
{ GATE: () => C.parseMode.has('canParseVars'), ALT: () => SUBRULE(var_, undefined) },
|
|
98
|
+
{ ALT: () => SUBRULE(iri, undefined) },
|
|
99
|
+
]),
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* [[108]](https://www.w3.org/TR/sparql11-query/#rVar)
|
|
103
|
+
*/
|
|
104
|
+
export const var_ = {
|
|
105
|
+
name: 'var',
|
|
106
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
107
|
+
const varToken = OR([
|
|
108
|
+
{ ALT: () => CONSUME(l.terminals.var1) },
|
|
109
|
+
{ ALT: () => CONSUME(l.terminals.var2) },
|
|
110
|
+
]);
|
|
111
|
+
return ACTION(() => C.factory.variable(varToken.image.slice(1), C.factory.sourceLocation(varToken)));
|
|
112
|
+
},
|
|
113
|
+
gImpl: ({ PRINT_WORD }) => (ast, { factory: F }) => {
|
|
114
|
+
F.printFilter(ast, () => PRINT_WORD(`?${ast.value}`));
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* [[109]](https://www.w3.org/TR/sparql11-query/#rGraphTerm)
|
|
119
|
+
*/
|
|
120
|
+
export const graphTerm = {
|
|
121
|
+
name: 'graphTerm',
|
|
122
|
+
impl: ({ ACTION, SUBRULE, CONSUME, OR }) => C => OR([
|
|
123
|
+
{ ALT: () => SUBRULE(iri, undefined) },
|
|
124
|
+
{ ALT: () => SUBRULE(rdfLiteral, undefined) },
|
|
125
|
+
{ ALT: () => SUBRULE(numericLiteral, undefined) },
|
|
126
|
+
{ ALT: () => SUBRULE(booleanLiteral, undefined) },
|
|
127
|
+
{ GATE: () => C.parseMode.has('canCreateBlankNodes'), ALT: () => SUBRULE(blankNode, undefined) },
|
|
128
|
+
{ ALT: () => {
|
|
129
|
+
const tokenNil = CONSUME(l.terminals.nil);
|
|
130
|
+
return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(tokenNil), CommonIRIs.NIL));
|
|
131
|
+
} },
|
|
132
|
+
]),
|
|
133
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {
|
|
134
|
+
if (F.isTermNamed(ast)) {
|
|
135
|
+
SUBRULE(iri, ast, undefined);
|
|
136
|
+
}
|
|
137
|
+
else if (F.isTermLiteral(ast)) {
|
|
138
|
+
SUBRULE(rdfLiteral, ast, undefined);
|
|
139
|
+
}
|
|
140
|
+
else if (F.isTermBlank(ast)) {
|
|
141
|
+
SUBRULE(blankNode, ast, undefined);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=general.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["general.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonIRIs } from '../grammar-helpers/utils';\nimport * as l from '../lexer';\nimport type {\n ContextDefinition,\n ContextDefinitionBase,\n ContextDefinitionPrefix,\n GraphTerm,\n Term,\n TermIri,\n TermVariable,\n} from '../RoundTripTypes';\nimport type { SparqlGrammarRule, SparqlRule } from '../Sparql11types';\nimport { blankNode, booleanLiteral, iri, iriFull, numericLiteral, rdfLiteral, verbA } from './literals';\n\n/**\n * [[4]](https://www.w3.org/TR/sparql11-query/#rPrologue)\n */\nexport const prologue: SparqlRule<'prologue', ContextDefinition[]> = <const> {\n name: 'prologue',\n impl: ({ SUBRULE, MANY, OR }) => () => {\n const result: ContextDefinition[] = [];\n MANY(() => OR([\n { ALT: () => result.push(SUBRULE(baseDecl, undefined)) },\n // TODO: the [spec](https://www.w3.org/TR/sparql11-query/#iriRefs) says you cannot redefine prefixes.\n // We might need to check this.\n { ALT: () => result.push(SUBRULE(prefixDecl, undefined)) },\n ]));\n return result;\n },\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n for (const context of ast) {\n if (F.isContextDefinitionBase(context)) {\n SUBRULE(baseDecl, context, undefined);\n } else if (F.isContextDefinitionPrefix(context)) {\n SUBRULE(prefixDecl, context, undefined);\n }\n }\n },\n};\n\n/**\n * Registers base IRI in the context and returns it.\n * [[5]](https://www.w3.org/TR/sparql11-query/#rBaseDecl)\n */\nexport const baseDecl: SparqlRule<'baseDecl', ContextDefinitionBase> = <const> {\n name: 'baseDecl',\n impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {\n const base = CONSUME(l.baseDecl);\n const val = SUBRULE(iriFull, undefined);\n return ACTION(() => C.factory.contextDefinitionBase(C.factory.sourceLocation(base, val), val));\n },\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => PRINT_WORD('BASE'));\n SUBRULE(iri, ast.value, undefined);\n },\n};\n\n/**\n * Registers prefix in the context and returns registered key-value-pair.\n * [[6]](https://www.w3.org/TR/sparql11-query/#rPrefixDecl)\n */\nexport const prefixDecl: SparqlRule<'prefixDecl', ContextDefinitionPrefix> = <const> {\n name: 'prefixDecl',\n impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {\n const prefix = CONSUME(l.prefixDecl);\n const name = CONSUME(l.terminals.pNameNs).image.slice(0, -1);\n const value = SUBRULE(iriFull, undefined);\n\n return ACTION(() => C.factory.contextDefinitionPrefix(C.factory.sourceLocation(prefix, value), name, value));\n },\n gImpl: ({ SUBRULE, PRINT_WORDS }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => {\n PRINT_WORDS('PREFIX', `${ast.key}:`);\n });\n SUBRULE(iri, ast.value, undefined);\n },\n};\n\n/**\n * [[78]](https://www.w3.org/TR/sparql11-query/#rVerb)\n */\nexport const verb: SparqlGrammarRule<'verb', TermVariable | TermIri> = <const> {\n name: 'verb',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(varOrIri, undefined) },\n { ALT: () => SUBRULE(verbA, undefined) },\n ]),\n};\n\n/**\n * [[106]](https://www.w3.org/TR/sparql11-query/#rVarOrTerm)\n */\nexport const varOrTerm: SparqlRule<'varOrTerm', Term> = <const> {\n name: 'varOrTerm',\n impl: ({ SUBRULE, OR }) => C => OR<Term>([\n { GATE: () => C.parseMode.has('canParseVars'), ALT: () => SUBRULE(var_, undefined) },\n { ALT: () => SUBRULE(graphTerm, undefined) },\n ]),\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n if (F.isTermVariable(ast)) {\n return SUBRULE(var_, ast, undefined);\n }\n return SUBRULE(graphTerm, ast, undefined);\n },\n};\n\n/**\n * [[107]](https://www.w3.org/TR/sparql11-query/#rVarOrIri)\n */\nexport const varOrIri: SparqlGrammarRule<'varOrIri', TermIri | TermVariable> = <const> {\n name: 'varOrIri',\n impl: ({ SUBRULE, OR }) => C => OR<TermIri | TermVariable>([\n { GATE: () => C.parseMode.has('canParseVars'), ALT: () => SUBRULE(var_, undefined) },\n { ALT: () => SUBRULE(iri, undefined) },\n ]),\n};\n\n/**\n * [[108]](https://www.w3.org/TR/sparql11-query/#rVar)\n */\nexport const var_: SparqlRule<'var', TermVariable> = <const> {\n name: 'var',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const varToken = OR([\n { ALT: () => CONSUME(l.terminals.var1) },\n { ALT: () => CONSUME(l.terminals.var2) },\n ]);\n return ACTION(() => C.factory.variable(varToken.image.slice(1), C.factory.sourceLocation(varToken)));\n },\n gImpl: ({ PRINT_WORD }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => PRINT_WORD(`?${ast.value}`));\n },\n};\n\n/**\n * [[109]](https://www.w3.org/TR/sparql11-query/#rGraphTerm)\n */\nexport const graphTerm: SparqlRule<'graphTerm', GraphTerm> = <const> {\n name: 'graphTerm',\n impl: ({ ACTION, SUBRULE, CONSUME, OR }) => C => OR<GraphTerm>([\n { ALT: () => SUBRULE(iri, undefined) },\n { ALT: () => SUBRULE(rdfLiteral, undefined) },\n { ALT: () => SUBRULE(numericLiteral, undefined) },\n { ALT: () => SUBRULE(booleanLiteral, undefined) },\n { GATE: () => C.parseMode.has('canCreateBlankNodes'), ALT: () => SUBRULE(blankNode, undefined) },\n { ALT: () => {\n const tokenNil = CONSUME(l.terminals.nil);\n return ACTION(() =>\n C.factory.namedNode(C.factory.sourceLocation(tokenNil), CommonIRIs.NIL));\n } },\n ]),\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n if (F.isTermNamed(ast)) {\n SUBRULE(iri, ast, undefined);\n } else if (F.isTermLiteral(ast)) {\n SUBRULE(rdfLiteral, ast, undefined);\n } else if (F.isTermBlank(ast)) {\n SUBRULE(blankNode, ast, undefined);\n }\n },\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './queryUnit/queryUnit';
|
|
2
|
+
export * from './updateUnit/updateUnit';
|
|
3
|
+
export * from './builtIn';
|
|
4
|
+
export * from './dataSetClause';
|
|
5
|
+
export * from './expression';
|
|
6
|
+
export * from '../expressionHelpers';
|
|
7
|
+
export * from './general';
|
|
8
|
+
export * from './literals';
|
|
9
|
+
export * from './propertyPaths';
|
|
10
|
+
export * from './solutionModifier';
|
|
11
|
+
export * from './tripleBlock';
|
|
12
|
+
export * from './whereClause';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './queryUnit/queryUnit';
|
|
2
|
+
export * from './updateUnit/updateUnit';
|
|
3
|
+
export * from './builtIn';
|
|
4
|
+
export * from './dataSetClause';
|
|
5
|
+
export * from './expression';
|
|
6
|
+
export * from '../expressionHelpers';
|
|
7
|
+
export * from './general';
|
|
8
|
+
export * from './literals';
|
|
9
|
+
export * from './propertyPaths';
|
|
10
|
+
export * from './solutionModifier';
|
|
11
|
+
export * from './tripleBlock';
|
|
12
|
+
export * from './whereClause';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC","sourcesContent":["export * from './queryUnit/queryUnit';\nexport * from './updateUnit/updateUnit';\nexport * from './builtIn';\nexport * from './dataSetClause';\nexport * from './expression';\nexport * from '../expressionHelpers';\nexport * from './general';\nexport * from './literals';\nexport * from './propertyPaths';\nexport * from './solutionModifier';\nexport * from './tripleBlock';\nexport * from './whereClause';\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { TermBlank, TermIri, TermIriFull, TermIriPrefixed, TermLiteral, TermLiteralStr, TermLiteralTyped } from '../RoundTripTypes';
|
|
2
|
+
import type { SparqlGrammarRule, SparqlRule } from '../Sparql11types';
|
|
3
|
+
export declare function stringEscapedLexical(str: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* [[120]](https://www.w3.org/TR/sparql11-query/#rRDFLiteral)
|
|
6
|
+
*/
|
|
7
|
+
export declare const rdfLiteral: SparqlRule<'rdfLiteral', TermLiteral>;
|
|
8
|
+
/**
|
|
9
|
+
* Parses a numeric literal.
|
|
10
|
+
* [[130]](https://www.w3.org/TR/sparql11-query/#rNumericLiteral)
|
|
11
|
+
*/
|
|
12
|
+
export declare const numericLiteral: SparqlGrammarRule<'numericLiteral', TermLiteralTyped>;
|
|
13
|
+
/**
|
|
14
|
+
* Parses an unsigned numeric literal.
|
|
15
|
+
* [[131]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralUnsigned)
|
|
16
|
+
*/
|
|
17
|
+
export declare const numericLiteralUnsigned: SparqlGrammarRule<'numericLiteralUnsigned', TermLiteralTyped>;
|
|
18
|
+
/**
|
|
19
|
+
* Parses a positive numeric literal.
|
|
20
|
+
* [[132]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralPositive)
|
|
21
|
+
*/
|
|
22
|
+
export declare const numericLiteralPositive: SparqlGrammarRule<'numericLiteralPositive', TermLiteralTyped>;
|
|
23
|
+
/**
|
|
24
|
+
* Parses a negative numeric literal.
|
|
25
|
+
* [[133]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralNegative)
|
|
26
|
+
*/
|
|
27
|
+
export declare const numericLiteralNegative: SparqlGrammarRule<'numericLiteralNegative', TermLiteralTyped>;
|
|
28
|
+
/**
|
|
29
|
+
* Parses a boolean literal.
|
|
30
|
+
* [[134]](https://www.w3.org/TR/sparql11-query/#rBooleanLiteral)
|
|
31
|
+
*/
|
|
32
|
+
export declare const booleanLiteral: SparqlGrammarRule<'booleanLiteral', TermLiteralTyped>;
|
|
33
|
+
/**
|
|
34
|
+
* Parses a string literal.
|
|
35
|
+
* [[135]](https://www.w3.org/TR/sparql11-query/#rString)
|
|
36
|
+
*/
|
|
37
|
+
export declare const string: SparqlGrammarRule<'string', TermLiteralStr>;
|
|
38
|
+
/**
|
|
39
|
+
* Parses a named node, either as an IRI or as a prefixed name.
|
|
40
|
+
* [[136]](https://www.w3.org/TR/sparql11-query/#riri)
|
|
41
|
+
*/
|
|
42
|
+
export declare const iri: SparqlRule<'iri', TermIri>;
|
|
43
|
+
export declare const iriFull: SparqlRule<'iriFull', TermIriFull>;
|
|
44
|
+
/**
|
|
45
|
+
* Parses a named node with a prefix. Looks up the prefix in the context and returns the full IRI.
|
|
46
|
+
* [[137]](https://www.w3.org/TR/sparql11-query/#rPrefixedName)
|
|
47
|
+
*/
|
|
48
|
+
export declare const prefixedName: SparqlRule<'prefixedName', TermIriPrefixed>;
|
|
49
|
+
export declare const canCreateBlankNodes: unique symbol;
|
|
50
|
+
/**
|
|
51
|
+
* Parses blank note and throws an error if 'canCreateBlankNodes' is not in the current parserMode.
|
|
52
|
+
* [[138]](https://www.w3.org/TR/sparql11-query/#rBlankNode)
|
|
53
|
+
*/
|
|
54
|
+
export declare const blankNode: SparqlRule<'blankNode', TermBlank>;
|
|
55
|
+
export declare const verbA: SparqlGrammarRule<'VerbA', TermIriFull>;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { CommonIRIs } from '../grammar-helpers/utils';
|
|
2
|
+
import * as l from '../lexer';
|
|
3
|
+
export function stringEscapedLexical(str) {
|
|
4
|
+
const lexical = str.replaceAll(/["\\\t\n\r\b\f]/gu, (char) => {
|
|
5
|
+
switch (char) {
|
|
6
|
+
case '\t':
|
|
7
|
+
return '\\t';
|
|
8
|
+
case '\n':
|
|
9
|
+
return '\\n';
|
|
10
|
+
case '\r':
|
|
11
|
+
return '\\r';
|
|
12
|
+
case '\b':
|
|
13
|
+
return '\\b';
|
|
14
|
+
case '\f':
|
|
15
|
+
return '\\f';
|
|
16
|
+
case '"':
|
|
17
|
+
return '\\"';
|
|
18
|
+
case '\\':
|
|
19
|
+
return '\\\\';
|
|
20
|
+
default:
|
|
21
|
+
return char;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return `"${lexical}"`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* [[120]](https://www.w3.org/TR/sparql11-query/#rRDFLiteral)
|
|
28
|
+
*/
|
|
29
|
+
export const rdfLiteral = {
|
|
30
|
+
name: 'rdfLiteral',
|
|
31
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION, OR }) => (C) => {
|
|
32
|
+
const value = SUBRULE1(string, undefined);
|
|
33
|
+
return OPTION(() => OR([
|
|
34
|
+
{ ALT: () => {
|
|
35
|
+
const lang = CONSUME(l.terminals.langTag);
|
|
36
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(value, lang), value.value, lang.image.slice(1).toLowerCase()));
|
|
37
|
+
} },
|
|
38
|
+
{ ALT: () => {
|
|
39
|
+
CONSUME(l.symbols.hathat);
|
|
40
|
+
const iriVal = SUBRULE1(iri, undefined);
|
|
41
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(value, iriVal), value.value, iriVal));
|
|
42
|
+
} },
|
|
43
|
+
])) ?? value;
|
|
44
|
+
},
|
|
45
|
+
gImpl: ({ SUBRULE, PRINT, PRINT_SPACE_LEFT }) => (ast, { factory }) => {
|
|
46
|
+
factory.printFilter(ast, () => PRINT_SPACE_LEFT(stringEscapedLexical(ast.value)));
|
|
47
|
+
if (ast.langOrIri) {
|
|
48
|
+
if (typeof ast.langOrIri === 'string') {
|
|
49
|
+
factory.printFilter(ast, () => PRINT('@', ast.langOrIri));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
factory.printFilter(ast, () => PRINT('^^'));
|
|
53
|
+
SUBRULE(iri, ast.langOrIri, undefined);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Parses a numeric literal.
|
|
60
|
+
* [[130]](https://www.w3.org/TR/sparql11-query/#rNumericLiteral)
|
|
61
|
+
*/
|
|
62
|
+
export const numericLiteral = {
|
|
63
|
+
name: 'numericLiteral',
|
|
64
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
65
|
+
{ ALT: () => SUBRULE(numericLiteralUnsigned, undefined) },
|
|
66
|
+
{ ALT: () => SUBRULE(numericLiteralPositive, undefined) },
|
|
67
|
+
{ ALT: () => SUBRULE(numericLiteralNegative, undefined) },
|
|
68
|
+
]),
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Parses an unsigned numeric literal.
|
|
72
|
+
* [[131]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralUnsigned)
|
|
73
|
+
*/
|
|
74
|
+
export const numericLiteralUnsigned = {
|
|
75
|
+
name: 'numericLiteralUnsigned',
|
|
76
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
77
|
+
const parsed = OR([
|
|
78
|
+
{ ALT: () => [CONSUME(l.terminals.integer), CommonIRIs.INTEGER] },
|
|
79
|
+
{ ALT: () => [CONSUME(l.terminals.decimal), CommonIRIs.DECIMAL] },
|
|
80
|
+
{ ALT: () => [CONSUME(l.terminals.double), CommonIRIs.DOUBLE] },
|
|
81
|
+
]);
|
|
82
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Parses a positive numeric literal.
|
|
87
|
+
* [[132]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralPositive)
|
|
88
|
+
*/
|
|
89
|
+
export const numericLiteralPositive = {
|
|
90
|
+
name: 'numericLiteralPositive',
|
|
91
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
92
|
+
const parsed = OR([
|
|
93
|
+
{ ALT: () => [CONSUME(l.terminals.integerPositive), CommonIRIs.INTEGER] },
|
|
94
|
+
{ ALT: () => [CONSUME(l.terminals.decimalPositive), CommonIRIs.DECIMAL] },
|
|
95
|
+
{ ALT: () => [CONSUME(l.terminals.doublePositive), CommonIRIs.DOUBLE] },
|
|
96
|
+
]);
|
|
97
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Parses a negative numeric literal.
|
|
102
|
+
* [[133]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralNegative)
|
|
103
|
+
*/
|
|
104
|
+
export const numericLiteralNegative = {
|
|
105
|
+
name: 'numericLiteralNegative',
|
|
106
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
107
|
+
const parsed = OR([
|
|
108
|
+
{ ALT: () => [CONSUME(l.terminals.integerNegative), CommonIRIs.INTEGER] },
|
|
109
|
+
{ ALT: () => [CONSUME(l.terminals.decimalNegative), CommonIRIs.DECIMAL] },
|
|
110
|
+
{ ALT: () => [CONSUME(l.terminals.doubleNegative), CommonIRIs.DOUBLE] },
|
|
111
|
+
]);
|
|
112
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Parses a boolean literal.
|
|
117
|
+
* [[134]](https://www.w3.org/TR/sparql11-query/#rBooleanLiteral)
|
|
118
|
+
*/
|
|
119
|
+
export const booleanLiteral = {
|
|
120
|
+
name: 'booleanLiteral',
|
|
121
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
122
|
+
const token = OR([
|
|
123
|
+
{ ALT: () => CONSUME(l.true_) },
|
|
124
|
+
{ ALT: () => CONSUME(l.false_) },
|
|
125
|
+
]);
|
|
126
|
+
return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(token), token.image.toLowerCase(), C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN)));
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Parses a string literal.
|
|
131
|
+
* [[135]](https://www.w3.org/TR/sparql11-query/#rString)
|
|
132
|
+
*/
|
|
133
|
+
export const string = {
|
|
134
|
+
name: 'string',
|
|
135
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
136
|
+
const x = OR([
|
|
137
|
+
{ ALT: () => {
|
|
138
|
+
const token = CONSUME(l.terminals.stringLiteral1);
|
|
139
|
+
return [token, token.image.slice(1, -1)];
|
|
140
|
+
} },
|
|
141
|
+
{ ALT: () => {
|
|
142
|
+
const token = CONSUME(l.terminals.stringLiteral2);
|
|
143
|
+
return [token, token.image.slice(1, -1)];
|
|
144
|
+
} },
|
|
145
|
+
{ ALT: () => {
|
|
146
|
+
const token = CONSUME(l.terminals.stringLiteralLong1);
|
|
147
|
+
return [token, token.image.slice(3, -3)];
|
|
148
|
+
} },
|
|
149
|
+
{ ALT: () => {
|
|
150
|
+
const token = CONSUME(l.terminals.stringLiteralLong2);
|
|
151
|
+
return [token, token.image.slice(3, -3)];
|
|
152
|
+
} },
|
|
153
|
+
]);
|
|
154
|
+
// Handle string escapes (19.7). (19.2 is handled at input level.)
|
|
155
|
+
return ACTION(() => {
|
|
156
|
+
const F = C.factory;
|
|
157
|
+
const value = x[1].replaceAll(/\\([tnrbf"'\\])/gu, (_, char) => {
|
|
158
|
+
switch (char) {
|
|
159
|
+
case 't':
|
|
160
|
+
return '\t';
|
|
161
|
+
case 'n':
|
|
162
|
+
return '\n';
|
|
163
|
+
case 'r':
|
|
164
|
+
return '\r';
|
|
165
|
+
case 'b':
|
|
166
|
+
return '\b';
|
|
167
|
+
case 'f':
|
|
168
|
+
return '\f';
|
|
169
|
+
default:
|
|
170
|
+
return char;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return F.literalTerm(F.sourceLocation(x[0]), value);
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Parses a named node, either as an IRI or as a prefixed name.
|
|
179
|
+
* [[136]](https://www.w3.org/TR/sparql11-query/#riri)
|
|
180
|
+
*/
|
|
181
|
+
export const iri = {
|
|
182
|
+
name: 'iri',
|
|
183
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
184
|
+
{ ALT: () => SUBRULE(iriFull, undefined) },
|
|
185
|
+
{ ALT: () => SUBRULE(prefixedName, undefined) },
|
|
186
|
+
]),
|
|
187
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => F.isTermNamedPrefixed(ast) ? SUBRULE(prefixedName, ast, undefined) : SUBRULE(iriFull, ast, undefined),
|
|
188
|
+
};
|
|
189
|
+
export const iriFull = {
|
|
190
|
+
name: 'iriFull',
|
|
191
|
+
impl: ({ ACTION, CONSUME }) => (C) => {
|
|
192
|
+
const iriToken = CONSUME(l.terminals.iriRef);
|
|
193
|
+
return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));
|
|
194
|
+
},
|
|
195
|
+
gImpl: ({ PRINT }) => (ast, { factory }) => {
|
|
196
|
+
factory.printFilter(ast, () => PRINT('<', ast.value, '>'));
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* Parses a named node with a prefix. Looks up the prefix in the context and returns the full IRI.
|
|
201
|
+
* [[137]](https://www.w3.org/TR/sparql11-query/#rPrefixedName)
|
|
202
|
+
*/
|
|
203
|
+
export const prefixedName = {
|
|
204
|
+
name: 'prefixedName',
|
|
205
|
+
impl: ({ ACTION, CONSUME, OR }) => C => OR([
|
|
206
|
+
{ ALT: () => {
|
|
207
|
+
const longName = CONSUME(l.terminals.pNameLn);
|
|
208
|
+
return ACTION(() => {
|
|
209
|
+
const [prefix, localName] = longName.image.split(':');
|
|
210
|
+
return C.factory.namedNode(C.factory.sourceLocation(longName), localName, prefix);
|
|
211
|
+
});
|
|
212
|
+
} },
|
|
213
|
+
{ ALT: () => {
|
|
214
|
+
const shortName = CONSUME(l.terminals.pNameNs);
|
|
215
|
+
return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(shortName), '', shortName.image.slice(0, -1)));
|
|
216
|
+
} },
|
|
217
|
+
]),
|
|
218
|
+
gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {
|
|
219
|
+
factory.printFilter(ast, () => PRINT_WORD(ast.prefix, ':', ast.value));
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
export const canCreateBlankNodes = Symbol('canCreateBlankNodes');
|
|
223
|
+
/**
|
|
224
|
+
* Parses blank note and throws an error if 'canCreateBlankNodes' is not in the current parserMode.
|
|
225
|
+
* [[138]](https://www.w3.org/TR/sparql11-query/#rBlankNode)
|
|
226
|
+
*/
|
|
227
|
+
export const blankNode = {
|
|
228
|
+
name: 'blankNode',
|
|
229
|
+
impl: ({ ACTION, CONSUME, OR }) => (C) => {
|
|
230
|
+
const result = OR([
|
|
231
|
+
{ ALT: () => {
|
|
232
|
+
const labelToken = CONSUME(l.terminals.blankNodeLabel);
|
|
233
|
+
return ACTION(() => C.factory.blankNode(labelToken.image.slice(2), C.factory.sourceLocation(labelToken)));
|
|
234
|
+
} },
|
|
235
|
+
{ ALT: () => {
|
|
236
|
+
const anonToken = CONSUME(l.terminals.anon);
|
|
237
|
+
return ACTION(() => C.factory.blankNode(undefined, C.factory.sourceLocation(anonToken)));
|
|
238
|
+
} },
|
|
239
|
+
]);
|
|
240
|
+
ACTION(() => {
|
|
241
|
+
if (!C.parseMode.has('canCreateBlankNodes')) {
|
|
242
|
+
throw new Error('Blank nodes are not allowed in this context');
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
return result;
|
|
246
|
+
},
|
|
247
|
+
gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {
|
|
248
|
+
factory.printFilter(ast, () => PRINT_WORD('_:', ast.label.replace(/^e_/u, '')));
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
export const verbA = {
|
|
252
|
+
name: 'VerbA',
|
|
253
|
+
impl: ({ ACTION, CONSUME }) => (C) => {
|
|
254
|
+
const token = CONSUME(l.a);
|
|
255
|
+
return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(token), CommonIRIs.TYPE, undefined));
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=literals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literals.js","sourceRoot":"","sources":["literals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IToken } from 'chevrotain';\nimport { CommonIRIs } from '../grammar-helpers/utils';\nimport * as l from '../lexer';\nimport type {\n TermBlank,\n TermIri,\n TermIriFull,\n TermIriPrefixed,\n TermLiteral,\n TermLiteralStr,\n TermLiteralTyped,\n} from '../RoundTripTypes';\n\nimport type { SparqlGrammarRule, SparqlRule } from '../Sparql11types';\n\nexport function stringEscapedLexical(str: string): string {\n const lexical = str.replaceAll(/[\"\\\\\\t\\n\\r\\b\\f]/gu, (char) => {\n switch (char) {\n case '\\t':\n return '\\\\t';\n case '\\n':\n return '\\\\n';\n case '\\r':\n return '\\\\r';\n case '\\b':\n return '\\\\b';\n case '\\f':\n return '\\\\f';\n case '\"':\n return '\\\\\"';\n case '\\\\':\n return '\\\\\\\\';\n default:\n return char;\n }\n });\n return `\"${lexical}\"`;\n}\n\n/**\n * [[120]](https://www.w3.org/TR/sparql11-query/#rRDFLiteral)\n */\nexport const rdfLiteral: SparqlRule<'rdfLiteral', TermLiteral> = <const> {\n name: 'rdfLiteral',\n impl: ({ ACTION, SUBRULE1, CONSUME, OPTION, OR }) => (C) => {\n const value = SUBRULE1(string, undefined);\n return OPTION(() => OR<TermLiteral>([\n { ALT: () => {\n const lang = CONSUME(l.terminals.langTag);\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(value, lang),\n value.value,\n lang.image.slice(1).toLowerCase(),\n ));\n } },\n { ALT: () => {\n CONSUME(l.symbols.hathat);\n const iriVal = SUBRULE1(iri, undefined);\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(value, iriVal),\n value.value,\n iriVal,\n ));\n } },\n ])) ?? value;\n },\n gImpl: ({ SUBRULE, PRINT, PRINT_SPACE_LEFT }) => (ast, { factory }) => {\n factory.printFilter(ast, () => PRINT_SPACE_LEFT(stringEscapedLexical(ast.value)));\n\n if (ast.langOrIri) {\n if (typeof ast.langOrIri === 'string') {\n factory.printFilter(ast, () => PRINT('@', ast.langOrIri));\n } else {\n factory.printFilter(ast, () => PRINT('^^'));\n SUBRULE(iri, ast.langOrIri, undefined);\n }\n }\n },\n};\n\n/**\n * Parses a numeric literal.\n * [[130]](https://www.w3.org/TR/sparql11-query/#rNumericLiteral)\n */\nexport const numericLiteral: SparqlGrammarRule<'numericLiteral', TermLiteralTyped> = <const> {\n name: 'numericLiteral',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(numericLiteralUnsigned, undefined) },\n { ALT: () => SUBRULE(numericLiteralPositive, undefined) },\n { ALT: () => SUBRULE(numericLiteralNegative, undefined) },\n ]),\n};\n\n/**\n * Parses an unsigned numeric literal.\n * [[131]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralUnsigned)\n */\nexport const numericLiteralUnsigned: SparqlGrammarRule<'numericLiteralUnsigned', TermLiteralTyped> = <const> {\n name: 'numericLiteralUnsigned',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const parsed = OR<[IToken, string]>([\n { ALT: () => <const> [ CONSUME(l.terminals.integer), CommonIRIs.INTEGER ]},\n { ALT: () => <const> [ CONSUME(l.terminals.decimal), CommonIRIs.DECIMAL ]},\n { ALT: () => <const> [ CONSUME(l.terminals.double), CommonIRIs.DOUBLE ]},\n ]);\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(parsed[0]),\n parsed[0].image,\n C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1]),\n ));\n },\n};\n\n/**\n * Parses a positive numeric literal.\n * [[132]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralPositive)\n */\nexport const numericLiteralPositive: SparqlGrammarRule<'numericLiteralPositive', TermLiteralTyped> = <const> {\n name: 'numericLiteralPositive',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const parsed = OR<[IToken, string]>([\n { ALT: () => <const> [ CONSUME(l.terminals.integerPositive), CommonIRIs.INTEGER ]},\n { ALT: () => <const> [ CONSUME(l.terminals.decimalPositive), CommonIRIs.DECIMAL ]},\n { ALT: () => <const> [ CONSUME(l.terminals.doublePositive), CommonIRIs.DOUBLE ]},\n ]);\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(parsed[0]),\n parsed[0].image,\n C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1]),\n ));\n },\n};\n\n/**\n * Parses a negative numeric literal.\n * [[133]](https://www.w3.org/TR/sparql11-query/#rNumericLiteralNegative)\n */\nexport const numericLiteralNegative: SparqlGrammarRule<'numericLiteralNegative', TermLiteralTyped> = <const> {\n name: 'numericLiteralNegative',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const parsed = OR<[IToken, string]>([\n { ALT: () => <const> [ CONSUME(l.terminals.integerNegative), CommonIRIs.INTEGER ]},\n { ALT: () => <const> [ CONSUME(l.terminals.decimalNegative), CommonIRIs.DECIMAL ]},\n { ALT: () => <const> [ CONSUME(l.terminals.doubleNegative), CommonIRIs.DOUBLE ]},\n ]);\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(parsed[0]),\n parsed[0].image,\n C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1]),\n ));\n },\n};\n\n/**\n * Parses a boolean literal.\n * [[134]](https://www.w3.org/TR/sparql11-query/#rBooleanLiteral)\n */\nexport const booleanLiteral: SparqlGrammarRule<'booleanLiteral', TermLiteralTyped> = <const> {\n name: 'booleanLiteral',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const token = OR([\n { ALT: () => CONSUME(l.true_) },\n { ALT: () => CONSUME(l.false_) },\n ]);\n\n return ACTION(() => C.factory.literalTerm(\n C.factory.sourceLocation(token),\n token.image.toLowerCase(),\n C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN),\n ));\n },\n};\n\n/**\n * Parses a string literal.\n * [[135]](https://www.w3.org/TR/sparql11-query/#rString)\n */\nexport const string: SparqlGrammarRule<'string', TermLiteralStr> = <const> {\n name: 'string',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const x = OR([\n { ALT: () => {\n const token = CONSUME(l.terminals.stringLiteral1);\n return <const>[ token, token.image.slice(1, -1) ];\n } },\n { ALT: () => {\n const token = CONSUME(l.terminals.stringLiteral2);\n return <const>[ token, token.image.slice(1, -1) ];\n } },\n { ALT: () => {\n const token = CONSUME(l.terminals.stringLiteralLong1);\n return <const>[ token, token.image.slice(3, -3) ];\n } },\n { ALT: () => {\n const token = CONSUME(l.terminals.stringLiteralLong2);\n return <const>[ token, token.image.slice(3, -3) ];\n } },\n ]);\n // Handle string escapes (19.7). (19.2 is handled at input level.)\n return ACTION(() => {\n const F = C.factory;\n const value = x[1].replaceAll(/\\\\([tnrbf\"'\\\\])/gu, (_, char: string) => {\n switch (char) {\n case 't':\n return '\\t';\n case 'n':\n return '\\n';\n case 'r':\n return '\\r';\n case 'b':\n return '\\b';\n case 'f':\n return '\\f';\n default:\n return char;\n }\n });\n return F.literalTerm(F.sourceLocation(x[0]), value);\n });\n },\n};\n\n/**\n * Parses a named node, either as an IRI or as a prefixed name.\n * [[136]](https://www.w3.org/TR/sparql11-query/#riri)\n */\nexport const iri: SparqlRule<'iri', TermIri> = <const> {\n name: 'iri',\n impl: ({ SUBRULE, OR }) => () => OR<TermIri>([\n { ALT: () => SUBRULE(iriFull, undefined) },\n { ALT: () => SUBRULE(prefixedName, undefined) },\n ]),\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) =>\n F.isTermNamedPrefixed(ast) ? SUBRULE(prefixedName, ast, undefined) : SUBRULE(iriFull, ast, undefined),\n};\n\nexport const iriFull: SparqlRule<'iriFull', TermIriFull> = <const> {\n name: 'iriFull',\n impl: ({ ACTION, CONSUME }) => (C) => {\n const iriToken = CONSUME(l.terminals.iriRef);\n return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));\n },\n gImpl: ({ PRINT }) => (ast, { factory }) => {\n factory.printFilter(ast, () => PRINT('<', ast.value, '>'));\n },\n};\n\n/**\n * Parses a named node with a prefix. Looks up the prefix in the context and returns the full IRI.\n * [[137]](https://www.w3.org/TR/sparql11-query/#rPrefixedName)\n */\nexport const prefixedName: SparqlRule<'prefixedName', TermIriPrefixed> = <const> {\n name: 'prefixedName',\n impl: ({ ACTION, CONSUME, OR }) => C => OR([\n { ALT: () => {\n const longName = CONSUME(l.terminals.pNameLn);\n return ACTION(() => {\n const [ prefix, localName ] = longName.image.split(':');\n return C.factory.namedNode(C.factory.sourceLocation(longName), localName, prefix);\n });\n } },\n { ALT: () => {\n const shortName = CONSUME(l.terminals.pNameNs);\n return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(shortName), '', shortName.image.slice(0, -1)));\n } },\n ]),\n gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {\n factory.printFilter(ast, () => PRINT_WORD(ast.prefix, ':', ast.value));\n },\n};\n\nexport const canCreateBlankNodes = Symbol('canCreateBlankNodes');\n\n/**\n * Parses blank note and throws an error if 'canCreateBlankNodes' is not in the current parserMode.\n * [[138]](https://www.w3.org/TR/sparql11-query/#rBlankNode)\n */\nexport const blankNode: SparqlRule<'blankNode', TermBlank> = <const> {\n name: 'blankNode',\n impl: ({ ACTION, CONSUME, OR }) => (C) => {\n const result = OR([\n { ALT: () => {\n const labelToken = CONSUME(l.terminals.blankNodeLabel);\n return ACTION(() =>\n C.factory.blankNode(labelToken.image.slice(2), C.factory.sourceLocation(labelToken)));\n } },\n { ALT: () => {\n const anonToken = CONSUME(l.terminals.anon);\n return ACTION(() => C.factory.blankNode(undefined, C.factory.sourceLocation(anonToken)));\n } },\n ]);\n ACTION(() => {\n if (!C.parseMode.has('canCreateBlankNodes')) {\n throw new Error('Blank nodes are not allowed in this context');\n }\n });\n return result;\n },\n gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {\n factory.printFilter(ast, () => PRINT_WORD('_:', ast.label.replace(/^e_/u, '')));\n },\n};\n\nexport const verbA: SparqlGrammarRule<'VerbA', TermIriFull> = <const> {\n name: 'VerbA',\n impl: ({ ACTION, CONSUME }) => (C) => {\n const token = CONSUME(l.a);\n return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(token), CommonIRIs.TYPE, undefined));\n },\n};\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { IToken, TokenType } from 'chevrotain';
|
|
2
|
+
import type { TermIri, PathNegatedElt, Path, PathModified, PathNegated } from '../RoundTripTypes';
|
|
3
|
+
import type { SparqlGeneratorRule, SparqlGrammarRule } from '../Sparql11types';
|
|
4
|
+
/**
|
|
5
|
+
* [[88]](https://www.w3.org/TR/sparql11-query/#rPath)
|
|
6
|
+
*/
|
|
7
|
+
export declare const path: SparqlGrammarRule<'path', Path>;
|
|
8
|
+
export declare const pathGenerator: SparqlGeneratorRule<'path', Path, boolean | undefined>;
|
|
9
|
+
export declare function pathChainHelper<T extends string>(name: T, SEP: TokenType, subType: '|' | '/', subRule: SparqlGrammarRule<string, Path>): SparqlGrammarRule<T, Path | TermIri>;
|
|
10
|
+
/**
|
|
11
|
+
* [[92]](https://www.w3.org/TR/sparql11-query/#rPathEltOrInverse)
|
|
12
|
+
*/
|
|
13
|
+
export declare const pathEltOrInverse: SparqlGrammarRule<'pathEltOrInverse', PathModified | Path>;
|
|
14
|
+
/**
|
|
15
|
+
* [[90]](https://www.w3.org/TR/sparql11-query/#rPathSequence)
|
|
16
|
+
*/
|
|
17
|
+
export declare const pathSequence: SparqlGrammarRule<"pathSequence", import("..").TermIriFull | import("..").TermIriPrefixed | import("..").PropertyPathChain | PathModified | PathNegated>;
|
|
18
|
+
/**
|
|
19
|
+
* [[89]](https://www.w3.org/TR/sparql11-query/#rPathAlternative)
|
|
20
|
+
*/
|
|
21
|
+
export declare const pathAlternative: SparqlGrammarRule<"pathAlternative", import("..").TermIriFull | import("..").TermIriPrefixed | import("..").PropertyPathChain | PathModified | PathNegated>;
|
|
22
|
+
/**
|
|
23
|
+
* [[91]](https://www.w3.org/TR/sparql11-query/#rPathElt)
|
|
24
|
+
*/
|
|
25
|
+
export declare const pathElt: SparqlGrammarRule<'pathElt', PathModified | Path>;
|
|
26
|
+
/**
|
|
27
|
+
* [[93]](https://www.w3.org/TR/sparql11-query/#rPathMod)
|
|
28
|
+
*/
|
|
29
|
+
export declare const pathMod: SparqlGrammarRule<'pathMod', IToken & {
|
|
30
|
+
image: '*' | '+' | '?';
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* [[94]](https://www.w3.org/TR/sparql11-query/#rPathPrimary)
|
|
34
|
+
*/
|
|
35
|
+
export declare const pathPrimary: SparqlGrammarRule<'pathPrimary', Path>;
|
|
36
|
+
/**
|
|
37
|
+
* [[95]](https://www.w3.org/TR/sparql11-query/#rPathNegatedPropertySet)
|
|
38
|
+
*/
|
|
39
|
+
export declare const pathNegatedPropertySet: SparqlGrammarRule<'pathNegatedPropertySet', PathNegated>;
|
|
40
|
+
/**
|
|
41
|
+
* [[96]](https://www.w3.org/TR/sparql11-query/#rPathOneInPropertySet)
|
|
42
|
+
*/
|
|
43
|
+
export declare const pathOneInPropertySet: SparqlGrammarRule<'pathOneInPropertySet', TermIri | PathNegatedElt>;
|