agentlang 0.0.2
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 +83 -0
- package/README.md +120 -0
- package/bin/cli.js +4 -0
- package/out/api/http.d.ts +3 -0
- package/out/api/http.d.ts.map +1 -0
- package/out/api/http.js +290 -0
- package/out/api/http.js.map +1 -0
- package/out/cli/cli-util.d.ts +7 -0
- package/out/cli/cli-util.d.ts.map +1 -0
- package/out/cli/cli-util.js +9 -0
- package/out/cli/cli-util.js.map +1 -0
- package/out/cli/docs.d.ts +2 -0
- package/out/cli/docs.d.ts.map +1 -0
- package/out/cli/docs.js +236 -0
- package/out/cli/docs.js.map +1 -0
- package/out/cli/main.d.ts +288 -0
- package/out/cli/main.d.ts.map +1 -0
- package/out/cli/main.js +119 -0
- package/out/cli/main.js.map +1 -0
- package/out/cli/openapi-docs.yml +695 -0
- package/out/extension/main.cjs +18093 -0
- package/out/extension/main.cjs.map +7 -0
- package/out/extension/main.d.ts +4 -0
- package/out/extension/main.d.ts.map +1 -0
- package/out/extension/main.js +42 -0
- package/out/extension/main.js.map +1 -0
- package/out/language/agentlang-module.d.ts +42 -0
- package/out/language/agentlang-module.d.ts.map +1 -0
- package/out/language/agentlang-module.js +42 -0
- package/out/language/agentlang-module.js.map +1 -0
- package/out/language/agentlang-validator.d.ts +15 -0
- package/out/language/agentlang-validator.d.ts.map +1 -0
- package/out/language/agentlang-validator.js +50 -0
- package/out/language/agentlang-validator.js.map +1 -0
- package/out/language/generated/ast.d.ts +491 -0
- package/out/language/generated/ast.d.ts.map +1 -0
- package/out/language/generated/ast.js +934 -0
- package/out/language/generated/ast.js.map +1 -0
- package/out/language/generated/grammar.d.ts +7 -0
- package/out/language/generated/grammar.d.ts.map +1 -0
- package/out/language/generated/grammar.js +4475 -0
- package/out/language/generated/grammar.js.map +1 -0
- package/out/language/generated/module.d.ts +14 -0
- package/out/language/generated/module.d.ts.map +1 -0
- package/out/language/generated/module.js +21 -0
- package/out/language/generated/module.js.map +1 -0
- package/out/language/main-browser.d.ts +2 -0
- package/out/language/main-browser.d.ts.map +1 -0
- package/out/language/main-browser.js +10 -0
- package/out/language/main-browser.js.map +1 -0
- package/out/language/main.cjs +36229 -0
- package/out/language/main.cjs.map +7 -0
- package/out/language/main.d.ts +2 -0
- package/out/language/main.d.ts.map +1 -0
- package/out/language/main.js +11 -0
- package/out/language/main.js.map +1 -0
- package/out/language/parser.d.ts +9 -0
- package/out/language/parser.d.ts.map +1 -0
- package/out/language/parser.js +273 -0
- package/out/language/parser.js.map +1 -0
- package/out/language/syntax.d.ts +155 -0
- package/out/language/syntax.d.ts.map +1 -0
- package/out/language/syntax.js +527 -0
- package/out/language/syntax.js.map +1 -0
- package/out/runtime/agents/common.d.ts +2 -0
- package/out/runtime/agents/common.d.ts.map +1 -0
- package/out/runtime/agents/common.js +178 -0
- package/out/runtime/agents/common.js.map +1 -0
- package/out/runtime/agents/impl/openai.d.ts +8 -0
- package/out/runtime/agents/impl/openai.d.ts.map +1 -0
- package/out/runtime/agents/impl/openai.js +15 -0
- package/out/runtime/agents/impl/openai.js.map +1 -0
- package/out/runtime/agents/provider.d.ts +21 -0
- package/out/runtime/agents/provider.d.ts.map +1 -0
- package/out/runtime/agents/provider.js +32 -0
- package/out/runtime/agents/provider.js.map +1 -0
- package/out/runtime/agents/registry.d.ts +2 -0
- package/out/runtime/agents/registry.d.ts.map +1 -0
- package/out/runtime/agents/registry.js +10 -0
- package/out/runtime/agents/registry.js.map +1 -0
- package/out/runtime/auth/cognito.d.ts +16 -0
- package/out/runtime/auth/cognito.d.ts.map +1 -0
- package/out/runtime/auth/cognito.js +186 -0
- package/out/runtime/auth/cognito.js.map +1 -0
- package/out/runtime/auth/defs.d.ts +11 -0
- package/out/runtime/auth/defs.d.ts.map +1 -0
- package/out/runtime/auth/defs.js +24 -0
- package/out/runtime/auth/defs.js.map +1 -0
- package/out/runtime/auth/interface.d.ts +22 -0
- package/out/runtime/auth/interface.d.ts.map +1 -0
- package/out/runtime/auth/interface.js +2 -0
- package/out/runtime/auth/interface.js.map +1 -0
- package/out/runtime/defs.js +24 -0
- package/out/runtime/defs.js.map +1 -0
- package/out/runtime/interpreter.d.ts +69 -0
- package/out/runtime/interpreter.d.ts.map +1 -0
- package/out/runtime/interpreter.js +1163 -0
- package/out/runtime/interpreter.js.map +1 -0
- package/out/runtime/loader.d.ts +25 -0
- package/out/runtime/loader.d.ts.map +1 -0
- package/out/runtime/loader.js +346 -0
- package/out/runtime/loader.js.map +1 -0
- package/out/runtime/logger.d.ts +2 -0
- package/out/runtime/logger.d.ts.map +1 -0
- package/out/runtime/logger.js +44 -0
- package/out/runtime/logger.js.map +1 -0
- package/out/runtime/module.d.ts +273 -0
- package/out/runtime/module.d.ts.map +1 -0
- package/out/runtime/module.js +1786 -0
- package/out/runtime/module.js.map +1 -0
- package/out/runtime/modules/ai.d.ts +26 -0
- package/out/runtime/modules/ai.d.ts.map +1 -0
- package/out/runtime/modules/ai.js +211 -0
- package/out/runtime/modules/ai.js.map +1 -0
- package/out/runtime/modules/auth.d.ts +39 -0
- package/out/runtime/modules/auth.d.ts.map +1 -0
- package/out/runtime/modules/auth.js +359 -0
- package/out/runtime/modules/auth.js.map +1 -0
- package/out/runtime/modules/core.d.ts +2 -0
- package/out/runtime/modules/core.d.ts.map +1 -0
- package/out/runtime/modules/core.js +67 -0
- package/out/runtime/modules/core.js.map +1 -0
- package/out/runtime/relgraph.d.ts +21 -0
- package/out/runtime/relgraph.d.ts.map +1 -0
- package/out/runtime/relgraph.js +156 -0
- package/out/runtime/relgraph.js.map +1 -0
- package/out/runtime/resolvers/interface.d.ts +59 -0
- package/out/runtime/resolvers/interface.d.ts.map +1 -0
- package/out/runtime/resolvers/interface.js +111 -0
- package/out/runtime/resolvers/interface.js.map +1 -0
- package/out/runtime/resolvers/registry.d.ts +8 -0
- package/out/runtime/resolvers/registry.d.ts.map +1 -0
- package/out/runtime/resolvers/registry.js +26 -0
- package/out/runtime/resolvers/registry.js.map +1 -0
- package/out/runtime/resolvers/sqldb/database.d.ts +50 -0
- package/out/runtime/resolvers/sqldb/database.d.ts.map +1 -0
- package/out/runtime/resolvers/sqldb/database.js +618 -0
- package/out/runtime/resolvers/sqldb/database.js.map +1 -0
- package/out/runtime/resolvers/sqldb/dbutil.d.ts +18 -0
- package/out/runtime/resolvers/sqldb/dbutil.d.ts.map +1 -0
- package/out/runtime/resolvers/sqldb/dbutil.js +221 -0
- package/out/runtime/resolvers/sqldb/dbutil.js.map +1 -0
- package/out/runtime/resolvers/sqldb/impl.d.ts +26 -0
- package/out/runtime/resolvers/sqldb/impl.d.ts.map +1 -0
- package/out/runtime/resolvers/sqldb/impl.js +300 -0
- package/out/runtime/resolvers/sqldb/impl.js.map +1 -0
- package/out/runtime/state.js +83 -0
- package/out/runtime/state.js.map +1 -0
- package/out/runtime/util.d.ts +43 -0
- package/out/runtime/util.d.ts.map +1 -0
- package/out/runtime/util.js +447 -0
- package/out/runtime/util.js.map +1 -0
- package/out/setupClassic.d.ts +98 -0
- package/out/setupClassic.d.ts.map +1 -0
- package/out/setupClassic.js +38 -0
- package/out/setupClassic.js.map +1 -0
- package/out/setupCommon.d.ts +2 -0
- package/out/setupCommon.d.ts.map +1 -0
- package/out/setupCommon.js +33 -0
- package/out/setupCommon.js.map +1 -0
- package/out/setupExtended.d.ts +40 -0
- package/out/setupExtended.d.ts.map +1 -0
- package/out/setupExtended.js +67 -0
- package/out/setupExtended.js.map +1 -0
- package/out/syntaxes/agentlang.monarch.d.ts +77 -0
- package/out/syntaxes/agentlang.monarch.d.ts.map +1 -0
- package/out/syntaxes/agentlang.monarch.js +31 -0
- package/out/syntaxes/agentlang.monarch.js.map +1 -0
- package/out/utils/fs/index.d.ts +14 -0
- package/out/utils/fs/index.d.ts.map +1 -0
- package/out/utils/fs/index.js +26 -0
- package/out/utils/fs/index.js.map +1 -0
- package/out/utils/fs/interfaces.d.ts +105 -0
- package/out/utils/fs/interfaces.d.ts.map +1 -0
- package/out/utils/fs/interfaces.js +5 -0
- package/out/utils/fs/interfaces.js.map +1 -0
- package/out/utils/fs/lightning-fs.d.ts +116 -0
- package/out/utils/fs/lightning-fs.d.ts.map +1 -0
- package/out/utils/fs/lightning-fs.js +243 -0
- package/out/utils/fs/lightning-fs.js.map +1 -0
- package/out/utils/fs/node-fs.d.ts +93 -0
- package/out/utils/fs/node-fs.d.ts.map +1 -0
- package/out/utils/fs/node-fs.js +169 -0
- package/out/utils/fs/node-fs.js.map +1 -0
- package/out/utils/fs-utils.d.ts +153 -0
- package/out/utils/fs-utils.d.ts.map +1 -0
- package/out/utils/fs-utils.js +271 -0
- package/out/utils/fs-utils.js.map +1 -0
- package/out/utils/runtime.d.ts +36 -0
- package/out/utils/runtime.d.ts.map +1 -0
- package/out/utils/runtime.js +39 -0
- package/out/utils/runtime.js.map +1 -0
- package/package.json +155 -0
- package/src/api/http.ts +361 -0
- package/src/cli/cli-util.ts +18 -0
- package/src/cli/main.ts +146 -0
- package/src/extension/main.ts +51 -0
- package/src/language/agentlang-module.ts +75 -0
- package/src/language/agentlang-validator.ts +60 -0
- package/src/language/agentlang.langium +178 -0
- package/src/language/generated/ast.ts +1698 -0
- package/src/language/generated/grammar.ts +4477 -0
- package/src/language/generated/module.ts +25 -0
- package/src/language/main-browser.ts +19 -0
- package/src/language/main.ts +13 -0
- package/src/language/parser.ts +329 -0
- package/src/language/syntax.ts +646 -0
- package/src/runtime/agents/common.ts +177 -0
- package/src/runtime/agents/impl/openai.ts +19 -0
- package/src/runtime/agents/provider.ts +58 -0
- package/src/runtime/agents/registry.ts +9 -0
- package/src/runtime/auth/cognito.ts +225 -0
- package/src/runtime/auth/defs.ts +33 -0
- package/src/runtime/auth/interface.ts +31 -0
- package/src/runtime/defs.ts +33 -0
- package/src/runtime/interpreter.ts +1352 -0
- package/src/runtime/loader.ts +450 -0
- package/src/runtime/logger.ts +51 -0
- package/src/runtime/module.ts +2188 -0
- package/src/runtime/modules/ai.ts +257 -0
- package/src/runtime/modules/auth.ts +489 -0
- package/src/runtime/modules/core.ts +95 -0
- package/src/runtime/relgraph.ts +195 -0
- package/src/runtime/resolvers/interface.ts +160 -0
- package/src/runtime/resolvers/registry.ts +30 -0
- package/src/runtime/resolvers/sqldb/database.ts +823 -0
- package/src/runtime/resolvers/sqldb/dbutil.ts +257 -0
- package/src/runtime/resolvers/sqldb/impl.ts +471 -0
- package/src/runtime/state.ts +87 -0
- package/src/runtime/util.ts +513 -0
- package/src/setupClassic.ts +43 -0
- package/src/setupCommon.ts +33 -0
- package/src/setupExtended.ts +79 -0
- package/src/syntaxes/agentlang.monarch.ts +31 -0
- package/src/utils/fs/index.ts +28 -0
- package/src/utils/fs/interfaces.ts +118 -0
- package/src/utils/fs/lightning-fs.ts +284 -0
- package/src/utils/fs/node-fs.ts +185 -0
- package/src/utils/fs-utils.ts +304 -0
- package/src/utils/runtime.ts +43 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ValidationAcceptor, ValidationChecks } from 'langium';
|
|
2
|
+
import {
|
|
3
|
+
AgentlangAstType,
|
|
4
|
+
AttributeDefinition,
|
|
5
|
+
isStandaloneStatement,
|
|
6
|
+
ModuleDefinition,
|
|
7
|
+
SchemaDefinition,
|
|
8
|
+
} from './generated/ast.js';
|
|
9
|
+
import type { AgentlangServices } from './agentlang-module.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Register custom validation checks.
|
|
13
|
+
*/
|
|
14
|
+
export function registerValidationChecks(services: AgentlangServices) {
|
|
15
|
+
const registry = services.validation.ValidationRegistry;
|
|
16
|
+
const validator = services.validation.AgentlangValidator;
|
|
17
|
+
const checks: ValidationChecks<AgentlangAstType> = {
|
|
18
|
+
ModuleDefinition: validator.checkUniqueDefs,
|
|
19
|
+
SchemaDefinition: validator.checkUniqueAttributes,
|
|
20
|
+
};
|
|
21
|
+
registry.register(checks, validator);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Implementation of custom validations.
|
|
26
|
+
*/
|
|
27
|
+
export class AgentlangValidator {
|
|
28
|
+
// our new validation function for defs
|
|
29
|
+
checkUniqueDefs(module: ModuleDefinition, accept: ValidationAcceptor): void {
|
|
30
|
+
// create a set of visited functions
|
|
31
|
+
// and report an error when we see one we've already seen
|
|
32
|
+
const reported = new Set();
|
|
33
|
+
module.defs.forEach(d => {
|
|
34
|
+
if (!isStandaloneStatement(d)) {
|
|
35
|
+
if (d.$type != 'WorkflowDefinition' && reported.has(d.name)) {
|
|
36
|
+
accept('error', `Definition has non-unique name '${d.name}'.`, {
|
|
37
|
+
node: d,
|
|
38
|
+
property: 'name',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
reported.add(d.name);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
checkUniqueAttributes(def: SchemaDefinition, accept: ValidationAcceptor): void {
|
|
47
|
+
// create a set of visited functions
|
|
48
|
+
// and report an error when we see one we've already seen
|
|
49
|
+
const reported = new Set();
|
|
50
|
+
def.schema.attributes.forEach((a: AttributeDefinition) => {
|
|
51
|
+
if (reported.has(a.name)) {
|
|
52
|
+
accept('error', `'${def.name} " - attribute has non-unique name '${a.name}'.`, {
|
|
53
|
+
node: a,
|
|
54
|
+
property: 'name',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
reported.add(a.name);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
grammar Agentlang
|
|
2
|
+
|
|
3
|
+
entry ModuleDefinition: 'module' name=ID (imports+=Import)* (defs+=Definition)*;
|
|
4
|
+
|
|
5
|
+
Import: 'import' path=STRING 'as' name=ID;
|
|
6
|
+
|
|
7
|
+
Definition: SchemaDefinition | RelationshipDefinition | WorkflowDefinition | StandaloneStatement;
|
|
8
|
+
|
|
9
|
+
StandaloneStatement: stmt=Statement;
|
|
10
|
+
|
|
11
|
+
SchemaDefinition: EntityDefinition | EventDefinition | RecordDefinition;
|
|
12
|
+
|
|
13
|
+
PropertyDefinition: (name=TaggedId '(' value=KvPairs ')') | name=TaggedId;
|
|
14
|
+
|
|
15
|
+
KvPair: value=Literal | key=ID ':' value=Literal;
|
|
16
|
+
KvPairs: pairs+=KvPair | pairs+=KvPair ',' pairs+=KvPair;
|
|
17
|
+
|
|
18
|
+
RecordSchemaDefinition: '{''}' | '{' (attributes+=AttributeDefinition (',' attributes+=AttributeDefinition)*)+
|
|
19
|
+
(',' extras+=RecordExtraDefinition (',' extras+=RecordExtraDefinition)*)? '}';
|
|
20
|
+
|
|
21
|
+
RecordExtraDefinition: rbacSpec=RbacSpecDefinition | meta=MetaDefinition | prePost=PrePostTriggerDefinition | uq=CompositeUniqueDefinition;
|
|
22
|
+
|
|
23
|
+
fragment RecDef: name=ID extends=ExtendsClause? schema=RecordSchemaDefinition;
|
|
24
|
+
|
|
25
|
+
EntityDefinition: 'entity' RecDef;
|
|
26
|
+
EventDefinition: 'event' RecDef;
|
|
27
|
+
RecordDefinition: 'record' RecDef;
|
|
28
|
+
|
|
29
|
+
ExtendsClause: 'extends' parentName=ID;
|
|
30
|
+
|
|
31
|
+
RelationshipDefinition: 'relationship' name=ID type=('contains' | 'between') nodes=RelNodes properties+=PropertyDefinition*
|
|
32
|
+
(schema=RecordSchemaDefinition)?;
|
|
33
|
+
|
|
34
|
+
NodeDefinition: name=ID | name=ID 'as' alias=ID;
|
|
35
|
+
|
|
36
|
+
RelNodes: '(' node1=NodeDefinition ',' node2=NodeDefinition ')';
|
|
37
|
+
|
|
38
|
+
AttributeDefinition: name=ID (type=ID | arrayType=ID '['']' | oneOfSpec=OneOfSpec | enumSpec=EnumSpec | refSpec=RefSpec) ('@expr' '(' expr=Expr ')')? properties+=PropertyDefinition*;
|
|
39
|
+
|
|
40
|
+
EnumSpec: '@enum' '(' values+=STRING (',' values+=STRING)* ')';
|
|
41
|
+
|
|
42
|
+
OneOfSpec: '@oneof' '(' ref=Ref ')';
|
|
43
|
+
|
|
44
|
+
RefSpec: '@ref' '(' ref=ID ')';
|
|
45
|
+
|
|
46
|
+
RbacSpecDefinition: '@rbac' '[' (specEntries+=RbacSpecEntries (',' specEntries+=RbacSpecEntries)*)+ ']';
|
|
47
|
+
|
|
48
|
+
RbacSpecEntry: role=RbacRolesSpec | allow=RbacAllowSpec | expr=RbacExpressionSpec;
|
|
49
|
+
|
|
50
|
+
RbacSpecEntries: '(' (entries+=RbacSpecEntry (',' entries+=RbacSpecEntry)*)+ ')';
|
|
51
|
+
|
|
52
|
+
RbacRolesSpec: 'roles' ':' '[' (roles+=ID (',' roles+=ID)*)+ ']';
|
|
53
|
+
|
|
54
|
+
RbacAllowSpec: 'allow' ':' '[' (oprs+=RbacOpr (',' oprs+=RbacOpr)*)+ ']';
|
|
55
|
+
|
|
56
|
+
RbacOpr: value=('create' | 'delete' | 'update' | 'read');
|
|
57
|
+
|
|
58
|
+
RbacExpressionSpec: 'where' ':' lhs=Ref '=' rhs=Ref;
|
|
59
|
+
|
|
60
|
+
MetaDefinition: '@meta' spec=MapLiteral;
|
|
61
|
+
|
|
62
|
+
PrePostTriggerDefinition: after=AfterTriggerDefinition | before=BeforeTriggerDefinition;
|
|
63
|
+
|
|
64
|
+
AfterTriggerDefinition: '@after' triggers=TriggerDefinition;
|
|
65
|
+
BeforeTriggerDefinition: '@before' triggers=TriggerDefinition;
|
|
66
|
+
|
|
67
|
+
TriggerDefinition: '{' entries+=TriggerEntry (',' entries+=TriggerEntry)* '}';
|
|
68
|
+
TriggerEntry: on=('create' | 'delete' | 'update') event=ID async='@async'?;
|
|
69
|
+
|
|
70
|
+
CompositeUniqueDefinition: '@with_unique' '(' attrs+=ID (',' attrs+=ID)* ')';
|
|
71
|
+
|
|
72
|
+
ArrayLiteral: '[' ']' | '[' vals+=Statement (',' vals+=Statement)* ']';
|
|
73
|
+
|
|
74
|
+
MapLiteral: '{' entries+=MapEntry (',' entries+=MapEntry)* '}';
|
|
75
|
+
|
|
76
|
+
MapEntry: key=MapKey ':' value=Literal;
|
|
77
|
+
|
|
78
|
+
MapKey: str=STRING | num=Decimal | bool=Boolean;
|
|
79
|
+
|
|
80
|
+
FnCall: name=(ID | Ref) (('(' ')') | ('(' (args+=Literal (',' args+=Literal)*)+ ')'));
|
|
81
|
+
|
|
82
|
+
AsyncFnCall: 'await' fnCall=FnCall;
|
|
83
|
+
|
|
84
|
+
Literal: (id=ID | num=Decimal | str=STRING | ref=Ref | bool=Boolean | fnCall=FnCall | asyncFnCall=AsyncFnCall | array=ArrayLiteral | map=MapLiteral);
|
|
85
|
+
|
|
86
|
+
fragment Body: '{' '}' | '{' (statements+=Statement (';' statements+=Statement)*)+ '}' | '{' statements+=Statement ';'+ '}' | statements+=Statement;
|
|
87
|
+
|
|
88
|
+
WorkflowDefinition: 'workflow' name=ID Body;
|
|
89
|
+
|
|
90
|
+
Pattern: literal=Literal | crudMap=CrudMap | if=If | forEach=ForEach | delete=Delete | purge=Purge | upsert=Upsert | fullTextSearch=FullTextSearch;
|
|
91
|
+
|
|
92
|
+
Statement: pattern=Pattern hints+=RuntimeHint*;
|
|
93
|
+
|
|
94
|
+
RuntimeHint: aliasSpec=AliasSpec | catchSpec=CatchSpec;
|
|
95
|
+
|
|
96
|
+
AliasSpec: ('as' (alias=ID | '[' ( aliases+=ID (',' aliases+=ID)*)+ ']'));
|
|
97
|
+
|
|
98
|
+
CrudMap: '{' (name=QueryId '{''}' | name=ID '{' (attributes+=SetAttribute (',' attributes+=SetAttribute)*)+ properties+=PropertyDefinition* '}')
|
|
99
|
+
(',' relationships+=RelationshipPattern (',' relationships+=RelationshipPattern)*)?
|
|
100
|
+
(',' into=SelectIntoSpec)? '}';
|
|
101
|
+
|
|
102
|
+
SelectIntoSpec: 'into' '{' entries+=SelectIntoEntry (',' entries+=SelectIntoEntry)* '}';
|
|
103
|
+
|
|
104
|
+
SelectIntoEntry: alias=ID attribute=Ref;
|
|
105
|
+
|
|
106
|
+
FullTextSearch: '{' name=QueryId query=Literal options=MapLiteral? '}';
|
|
107
|
+
|
|
108
|
+
RelationshipPattern: name=ID pattern=Pattern;
|
|
109
|
+
|
|
110
|
+
CatchSpec: 'catch' '{' (handlers+=Handler)+ '}';
|
|
111
|
+
|
|
112
|
+
Handler: except=('not_found' | 'error') stmt=Statement;
|
|
113
|
+
|
|
114
|
+
If: 'if' '(' cond=Expr ')' Body else=Else?;
|
|
115
|
+
|
|
116
|
+
Else: 'else' Body;
|
|
117
|
+
|
|
118
|
+
ForEach: 'for' var=ID 'in' src=Pattern Body;
|
|
119
|
+
|
|
120
|
+
Delete: 'delete' pattern=Pattern;
|
|
121
|
+
|
|
122
|
+
Purge: 'purge' pattern=Pattern;
|
|
123
|
+
|
|
124
|
+
Upsert: 'upsert' pattern=CrudMap;
|
|
125
|
+
|
|
126
|
+
SetAttribute: name=QueryId op=('='|'<>'|'<'|'<='|'>'|'>='|'in'|'like'|'between')? value=AttributeValueExpression;
|
|
127
|
+
|
|
128
|
+
AttributeValueExpression: Expr;
|
|
129
|
+
|
|
130
|
+
Expr: Add;
|
|
131
|
+
|
|
132
|
+
Add infers Expr:
|
|
133
|
+
Mult ({infer BinExpr.e1=current} op=('+'|'-') e2=Mult)*;
|
|
134
|
+
|
|
135
|
+
Mult infers Expr:
|
|
136
|
+
Logical ({infer BinExpr.e1=current} op=('*'|'/') e2=Logical)*;
|
|
137
|
+
|
|
138
|
+
Logical infers Expr:
|
|
139
|
+
Comparison ({infer BinExpr.e1=current} op=('or'|'and') e2=Comparison)*;
|
|
140
|
+
|
|
141
|
+
Comparison infers Expr:
|
|
142
|
+
PrimExpr ({infer BinExpr.e1=current} op=('='|'<>'|'<'|'<='|'>'|'>='|'in'|'like') e2=PrimExpr)*;
|
|
143
|
+
|
|
144
|
+
PrimExpr: Literal | Group | NegExpr | NotExpr;
|
|
145
|
+
|
|
146
|
+
// grouped expression with parentheses
|
|
147
|
+
Group: '(' ge=Expr ')';
|
|
148
|
+
// negated expression
|
|
149
|
+
NegExpr: '-' ne=Expr;
|
|
150
|
+
|
|
151
|
+
NotExpr: 'not' '(' ne=Expr ')';
|
|
152
|
+
|
|
153
|
+
Boolean returns string: 'true' | 'false';
|
|
154
|
+
|
|
155
|
+
Decimal returns number: INT | INT '.' INT;
|
|
156
|
+
|
|
157
|
+
QueryId returns string: ID | ID '?';
|
|
158
|
+
|
|
159
|
+
TaggedId returns string: '@' ID;
|
|
160
|
+
|
|
161
|
+
Ref returns string: ID '.' (Ref | ID);
|
|
162
|
+
|
|
163
|
+
terminal ID returns string: NAME ('/' NAME)?;
|
|
164
|
+
|
|
165
|
+
// recognize an identifier
|
|
166
|
+
terminal NAME returns string: /[_a-zA-Z][\w_]*/;
|
|
167
|
+
|
|
168
|
+
// quoted strings
|
|
169
|
+
terminal STRING returns string: /(["'])((\\{2})*|(.*?[^\\](\\{2})*))\1/;
|
|
170
|
+
|
|
171
|
+
// recognize an Integer (but represented via a 'number' type)
|
|
172
|
+
terminal INT returns number: /-?[0-9]+/;
|
|
173
|
+
|
|
174
|
+
hidden terminal WS: /\s+/;
|
|
175
|
+
hidden terminal ML_COMMENT: /\/\*[\s\S]*?\*\//;
|
|
176
|
+
hidden terminal SL_COMMENT: /\/\/[^\n\r]*/;
|
|
177
|
+
|
|
178
|
+
|