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.
Files changed (240) hide show
  1. package/LICENSE +83 -0
  2. package/README.md +120 -0
  3. package/bin/cli.js +4 -0
  4. package/out/api/http.d.ts +3 -0
  5. package/out/api/http.d.ts.map +1 -0
  6. package/out/api/http.js +290 -0
  7. package/out/api/http.js.map +1 -0
  8. package/out/cli/cli-util.d.ts +7 -0
  9. package/out/cli/cli-util.d.ts.map +1 -0
  10. package/out/cli/cli-util.js +9 -0
  11. package/out/cli/cli-util.js.map +1 -0
  12. package/out/cli/docs.d.ts +2 -0
  13. package/out/cli/docs.d.ts.map +1 -0
  14. package/out/cli/docs.js +236 -0
  15. package/out/cli/docs.js.map +1 -0
  16. package/out/cli/main.d.ts +288 -0
  17. package/out/cli/main.d.ts.map +1 -0
  18. package/out/cli/main.js +119 -0
  19. package/out/cli/main.js.map +1 -0
  20. package/out/cli/openapi-docs.yml +695 -0
  21. package/out/extension/main.cjs +18093 -0
  22. package/out/extension/main.cjs.map +7 -0
  23. package/out/extension/main.d.ts +4 -0
  24. package/out/extension/main.d.ts.map +1 -0
  25. package/out/extension/main.js +42 -0
  26. package/out/extension/main.js.map +1 -0
  27. package/out/language/agentlang-module.d.ts +42 -0
  28. package/out/language/agentlang-module.d.ts.map +1 -0
  29. package/out/language/agentlang-module.js +42 -0
  30. package/out/language/agentlang-module.js.map +1 -0
  31. package/out/language/agentlang-validator.d.ts +15 -0
  32. package/out/language/agentlang-validator.d.ts.map +1 -0
  33. package/out/language/agentlang-validator.js +50 -0
  34. package/out/language/agentlang-validator.js.map +1 -0
  35. package/out/language/generated/ast.d.ts +491 -0
  36. package/out/language/generated/ast.d.ts.map +1 -0
  37. package/out/language/generated/ast.js +934 -0
  38. package/out/language/generated/ast.js.map +1 -0
  39. package/out/language/generated/grammar.d.ts +7 -0
  40. package/out/language/generated/grammar.d.ts.map +1 -0
  41. package/out/language/generated/grammar.js +4475 -0
  42. package/out/language/generated/grammar.js.map +1 -0
  43. package/out/language/generated/module.d.ts +14 -0
  44. package/out/language/generated/module.d.ts.map +1 -0
  45. package/out/language/generated/module.js +21 -0
  46. package/out/language/generated/module.js.map +1 -0
  47. package/out/language/main-browser.d.ts +2 -0
  48. package/out/language/main-browser.d.ts.map +1 -0
  49. package/out/language/main-browser.js +10 -0
  50. package/out/language/main-browser.js.map +1 -0
  51. package/out/language/main.cjs +36229 -0
  52. package/out/language/main.cjs.map +7 -0
  53. package/out/language/main.d.ts +2 -0
  54. package/out/language/main.d.ts.map +1 -0
  55. package/out/language/main.js +11 -0
  56. package/out/language/main.js.map +1 -0
  57. package/out/language/parser.d.ts +9 -0
  58. package/out/language/parser.d.ts.map +1 -0
  59. package/out/language/parser.js +273 -0
  60. package/out/language/parser.js.map +1 -0
  61. package/out/language/syntax.d.ts +155 -0
  62. package/out/language/syntax.d.ts.map +1 -0
  63. package/out/language/syntax.js +527 -0
  64. package/out/language/syntax.js.map +1 -0
  65. package/out/runtime/agents/common.d.ts +2 -0
  66. package/out/runtime/agents/common.d.ts.map +1 -0
  67. package/out/runtime/agents/common.js +178 -0
  68. package/out/runtime/agents/common.js.map +1 -0
  69. package/out/runtime/agents/impl/openai.d.ts +8 -0
  70. package/out/runtime/agents/impl/openai.d.ts.map +1 -0
  71. package/out/runtime/agents/impl/openai.js +15 -0
  72. package/out/runtime/agents/impl/openai.js.map +1 -0
  73. package/out/runtime/agents/provider.d.ts +21 -0
  74. package/out/runtime/agents/provider.d.ts.map +1 -0
  75. package/out/runtime/agents/provider.js +32 -0
  76. package/out/runtime/agents/provider.js.map +1 -0
  77. package/out/runtime/agents/registry.d.ts +2 -0
  78. package/out/runtime/agents/registry.d.ts.map +1 -0
  79. package/out/runtime/agents/registry.js +10 -0
  80. package/out/runtime/agents/registry.js.map +1 -0
  81. package/out/runtime/auth/cognito.d.ts +16 -0
  82. package/out/runtime/auth/cognito.d.ts.map +1 -0
  83. package/out/runtime/auth/cognito.js +186 -0
  84. package/out/runtime/auth/cognito.js.map +1 -0
  85. package/out/runtime/auth/defs.d.ts +11 -0
  86. package/out/runtime/auth/defs.d.ts.map +1 -0
  87. package/out/runtime/auth/defs.js +24 -0
  88. package/out/runtime/auth/defs.js.map +1 -0
  89. package/out/runtime/auth/interface.d.ts +22 -0
  90. package/out/runtime/auth/interface.d.ts.map +1 -0
  91. package/out/runtime/auth/interface.js +2 -0
  92. package/out/runtime/auth/interface.js.map +1 -0
  93. package/out/runtime/defs.js +24 -0
  94. package/out/runtime/defs.js.map +1 -0
  95. package/out/runtime/interpreter.d.ts +69 -0
  96. package/out/runtime/interpreter.d.ts.map +1 -0
  97. package/out/runtime/interpreter.js +1163 -0
  98. package/out/runtime/interpreter.js.map +1 -0
  99. package/out/runtime/loader.d.ts +25 -0
  100. package/out/runtime/loader.d.ts.map +1 -0
  101. package/out/runtime/loader.js +346 -0
  102. package/out/runtime/loader.js.map +1 -0
  103. package/out/runtime/logger.d.ts +2 -0
  104. package/out/runtime/logger.d.ts.map +1 -0
  105. package/out/runtime/logger.js +44 -0
  106. package/out/runtime/logger.js.map +1 -0
  107. package/out/runtime/module.d.ts +273 -0
  108. package/out/runtime/module.d.ts.map +1 -0
  109. package/out/runtime/module.js +1786 -0
  110. package/out/runtime/module.js.map +1 -0
  111. package/out/runtime/modules/ai.d.ts +26 -0
  112. package/out/runtime/modules/ai.d.ts.map +1 -0
  113. package/out/runtime/modules/ai.js +211 -0
  114. package/out/runtime/modules/ai.js.map +1 -0
  115. package/out/runtime/modules/auth.d.ts +39 -0
  116. package/out/runtime/modules/auth.d.ts.map +1 -0
  117. package/out/runtime/modules/auth.js +359 -0
  118. package/out/runtime/modules/auth.js.map +1 -0
  119. package/out/runtime/modules/core.d.ts +2 -0
  120. package/out/runtime/modules/core.d.ts.map +1 -0
  121. package/out/runtime/modules/core.js +67 -0
  122. package/out/runtime/modules/core.js.map +1 -0
  123. package/out/runtime/relgraph.d.ts +21 -0
  124. package/out/runtime/relgraph.d.ts.map +1 -0
  125. package/out/runtime/relgraph.js +156 -0
  126. package/out/runtime/relgraph.js.map +1 -0
  127. package/out/runtime/resolvers/interface.d.ts +59 -0
  128. package/out/runtime/resolvers/interface.d.ts.map +1 -0
  129. package/out/runtime/resolvers/interface.js +111 -0
  130. package/out/runtime/resolvers/interface.js.map +1 -0
  131. package/out/runtime/resolvers/registry.d.ts +8 -0
  132. package/out/runtime/resolvers/registry.d.ts.map +1 -0
  133. package/out/runtime/resolvers/registry.js +26 -0
  134. package/out/runtime/resolvers/registry.js.map +1 -0
  135. package/out/runtime/resolvers/sqldb/database.d.ts +50 -0
  136. package/out/runtime/resolvers/sqldb/database.d.ts.map +1 -0
  137. package/out/runtime/resolvers/sqldb/database.js +618 -0
  138. package/out/runtime/resolvers/sqldb/database.js.map +1 -0
  139. package/out/runtime/resolvers/sqldb/dbutil.d.ts +18 -0
  140. package/out/runtime/resolvers/sqldb/dbutil.d.ts.map +1 -0
  141. package/out/runtime/resolvers/sqldb/dbutil.js +221 -0
  142. package/out/runtime/resolvers/sqldb/dbutil.js.map +1 -0
  143. package/out/runtime/resolvers/sqldb/impl.d.ts +26 -0
  144. package/out/runtime/resolvers/sqldb/impl.d.ts.map +1 -0
  145. package/out/runtime/resolvers/sqldb/impl.js +300 -0
  146. package/out/runtime/resolvers/sqldb/impl.js.map +1 -0
  147. package/out/runtime/state.js +83 -0
  148. package/out/runtime/state.js.map +1 -0
  149. package/out/runtime/util.d.ts +43 -0
  150. package/out/runtime/util.d.ts.map +1 -0
  151. package/out/runtime/util.js +447 -0
  152. package/out/runtime/util.js.map +1 -0
  153. package/out/setupClassic.d.ts +98 -0
  154. package/out/setupClassic.d.ts.map +1 -0
  155. package/out/setupClassic.js +38 -0
  156. package/out/setupClassic.js.map +1 -0
  157. package/out/setupCommon.d.ts +2 -0
  158. package/out/setupCommon.d.ts.map +1 -0
  159. package/out/setupCommon.js +33 -0
  160. package/out/setupCommon.js.map +1 -0
  161. package/out/setupExtended.d.ts +40 -0
  162. package/out/setupExtended.d.ts.map +1 -0
  163. package/out/setupExtended.js +67 -0
  164. package/out/setupExtended.js.map +1 -0
  165. package/out/syntaxes/agentlang.monarch.d.ts +77 -0
  166. package/out/syntaxes/agentlang.monarch.d.ts.map +1 -0
  167. package/out/syntaxes/agentlang.monarch.js +31 -0
  168. package/out/syntaxes/agentlang.monarch.js.map +1 -0
  169. package/out/utils/fs/index.d.ts +14 -0
  170. package/out/utils/fs/index.d.ts.map +1 -0
  171. package/out/utils/fs/index.js +26 -0
  172. package/out/utils/fs/index.js.map +1 -0
  173. package/out/utils/fs/interfaces.d.ts +105 -0
  174. package/out/utils/fs/interfaces.d.ts.map +1 -0
  175. package/out/utils/fs/interfaces.js +5 -0
  176. package/out/utils/fs/interfaces.js.map +1 -0
  177. package/out/utils/fs/lightning-fs.d.ts +116 -0
  178. package/out/utils/fs/lightning-fs.d.ts.map +1 -0
  179. package/out/utils/fs/lightning-fs.js +243 -0
  180. package/out/utils/fs/lightning-fs.js.map +1 -0
  181. package/out/utils/fs/node-fs.d.ts +93 -0
  182. package/out/utils/fs/node-fs.d.ts.map +1 -0
  183. package/out/utils/fs/node-fs.js +169 -0
  184. package/out/utils/fs/node-fs.js.map +1 -0
  185. package/out/utils/fs-utils.d.ts +153 -0
  186. package/out/utils/fs-utils.d.ts.map +1 -0
  187. package/out/utils/fs-utils.js +271 -0
  188. package/out/utils/fs-utils.js.map +1 -0
  189. package/out/utils/runtime.d.ts +36 -0
  190. package/out/utils/runtime.d.ts.map +1 -0
  191. package/out/utils/runtime.js +39 -0
  192. package/out/utils/runtime.js.map +1 -0
  193. package/package.json +155 -0
  194. package/src/api/http.ts +361 -0
  195. package/src/cli/cli-util.ts +18 -0
  196. package/src/cli/main.ts +146 -0
  197. package/src/extension/main.ts +51 -0
  198. package/src/language/agentlang-module.ts +75 -0
  199. package/src/language/agentlang-validator.ts +60 -0
  200. package/src/language/agentlang.langium +178 -0
  201. package/src/language/generated/ast.ts +1698 -0
  202. package/src/language/generated/grammar.ts +4477 -0
  203. package/src/language/generated/module.ts +25 -0
  204. package/src/language/main-browser.ts +19 -0
  205. package/src/language/main.ts +13 -0
  206. package/src/language/parser.ts +329 -0
  207. package/src/language/syntax.ts +646 -0
  208. package/src/runtime/agents/common.ts +177 -0
  209. package/src/runtime/agents/impl/openai.ts +19 -0
  210. package/src/runtime/agents/provider.ts +58 -0
  211. package/src/runtime/agents/registry.ts +9 -0
  212. package/src/runtime/auth/cognito.ts +225 -0
  213. package/src/runtime/auth/defs.ts +33 -0
  214. package/src/runtime/auth/interface.ts +31 -0
  215. package/src/runtime/defs.ts +33 -0
  216. package/src/runtime/interpreter.ts +1352 -0
  217. package/src/runtime/loader.ts +450 -0
  218. package/src/runtime/logger.ts +51 -0
  219. package/src/runtime/module.ts +2188 -0
  220. package/src/runtime/modules/ai.ts +257 -0
  221. package/src/runtime/modules/auth.ts +489 -0
  222. package/src/runtime/modules/core.ts +95 -0
  223. package/src/runtime/relgraph.ts +195 -0
  224. package/src/runtime/resolvers/interface.ts +160 -0
  225. package/src/runtime/resolvers/registry.ts +30 -0
  226. package/src/runtime/resolvers/sqldb/database.ts +823 -0
  227. package/src/runtime/resolvers/sqldb/dbutil.ts +257 -0
  228. package/src/runtime/resolvers/sqldb/impl.ts +471 -0
  229. package/src/runtime/state.ts +87 -0
  230. package/src/runtime/util.ts +513 -0
  231. package/src/setupClassic.ts +43 -0
  232. package/src/setupCommon.ts +33 -0
  233. package/src/setupExtended.ts +79 -0
  234. package/src/syntaxes/agentlang.monarch.ts +31 -0
  235. package/src/utils/fs/index.ts +28 -0
  236. package/src/utils/fs/interfaces.ts +118 -0
  237. package/src/utils/fs/lightning-fs.ts +284 -0
  238. package/src/utils/fs/node-fs.ts +185 -0
  239. package/src/utils/fs-utils.ts +304 -0
  240. 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
+