a05f58f7fe
Add shared colored tags, native tag/status filters, cursor-paged task and completion views, estimated-hour aggregates and repeat-after-completion actions. Keep task views independently renderable and isolate component styling. Cover immutable fresh-template/additive checks, real PostgreSQL/orch package actions and query watches, and wide/narrow browser layouts. Accept documented hyphenated query budget names in the capability lexer. Template publication/default selection pending installation AWS SSO renewal; no live workspace data or deployment configuration changed.
558 lines
11 KiB
ANTLR
558 lines
11 KiB
ANTLR
grammar QuixosCapability;
|
|
|
|
document
|
|
: workspaceDecl EOF
|
|
| interfaceResourceDecl EOF
|
|
| packageResourceDecl EOF
|
|
| fragmentDecl EOF
|
|
;
|
|
|
|
fragmentDecl
|
|
: FRAGMENT LBRACE workspaceItem* RBRACE
|
|
;
|
|
|
|
sourceImportDecl
|
|
: IMPORT stringLiteral SEMI
|
|
;
|
|
|
|
workspaceDecl
|
|
: WORKSPACE identifier ID stringLiteral REVISION stringLiteral COMMIT stringLiteral
|
|
LBRACE workspaceItem* RBRACE
|
|
;
|
|
|
|
workspaceItem
|
|
: sourceImportDecl
|
|
| atomDecl
|
|
| resourceImportDecl
|
|
| sharedAttachmentDecl
|
|
| conformanceDecl
|
|
| constructorBindingDecl
|
|
| typeAliasDecl
|
|
;
|
|
|
|
resourceImportDecl
|
|
: IMPORT INTERFACE identifier SEMI
|
|
| IMPORT PACKAGE identifier SEMI
|
|
;
|
|
|
|
externalAtomDecl
|
|
: EXTERNAL ATOM identifier ID stringLiteral SEMI
|
|
;
|
|
|
|
externalInterfaceDecl
|
|
: EXTERNAL INTERFACE identifier REVISION stringLiteral SEMI
|
|
;
|
|
|
|
resourcePreamble
|
|
: resourceImportDecl
|
|
| externalAtomDecl
|
|
| externalInterfaceDecl
|
|
| typeAliasDecl
|
|
;
|
|
|
|
atomDecl
|
|
: ATOM identifier ID stringLiteral (DOC stringLiteral)? SEMI
|
|
;
|
|
|
|
interfaceResourceDecl
|
|
: resourcePreamble* INTERFACE identifier typeParameters? ID stringLiteral REVISION stringLiteral
|
|
(REQUIRES interfaceType (COMMA interfaceType)*)?
|
|
LBRACE interfaceMember* RBRACE
|
|
;
|
|
|
|
typeParameters
|
|
: LT typeParameter (COMMA typeParameter)* GT
|
|
;
|
|
|
|
typeParameter
|
|
: VALUE identifier (COLON STORABLE)?
|
|
| OBJECT identifier (IMPLEMENTS interfaceType (AMP interfaceType)*)?
|
|
;
|
|
|
|
interfaceType
|
|
: identifier typeArguments?
|
|
;
|
|
|
|
typeArguments
|
|
: LT typeArgument (COMMA typeArgument)* GT
|
|
;
|
|
|
|
typeArgument
|
|
: ATOM identifier
|
|
| INTERFACE interfaceType
|
|
| OBJECT identifier
|
|
| valueType
|
|
;
|
|
|
|
typeAliasDecl
|
|
: TYPE identifier typeParameters? EQUAL valueType SEMI
|
|
;
|
|
|
|
interfaceMember
|
|
: valueMember
|
|
| relationshipMember
|
|
| operationMember
|
|
;
|
|
|
|
operationMember
|
|
: STATIC? OPERATION identifier ID stringLiteral COLON valueType ARROW valueType
|
|
LBRACE CALL ID stringLiteral SEMI RBRACE
|
|
;
|
|
|
|
valueMember
|
|
: queryReadContract? VALUE identifier ID stringLiteral COLON valueType
|
|
LBRACE valueMemberOperation* RBRACE
|
|
;
|
|
|
|
valueMemberOperation
|
|
: GET ID stringLiteral SEMI
|
|
| SET ID stringLiteral SEMI
|
|
| WATCH START ID stringLiteral STOP ID stringLiteral SEMI
|
|
;
|
|
|
|
relationshipMember
|
|
: queryReadContract? RELATION identifier ID stringLiteral COLON cardinality targetConstraint ORDERED? (KEYED stringLiteral)?
|
|
LBRACE relationshipOperation* RBRACE
|
|
;
|
|
|
|
queryReadContract
|
|
: QUERYABLE RPC?
|
|
;
|
|
|
|
relationshipOperation
|
|
: RESOLVE ID stringLiteral SEMI
|
|
| CONNECT ID stringLiteral SEMI
|
|
| DISCONNECT ID stringLiteral SEMI
|
|
| WATCH START ID stringLiteral STOP ID stringLiteral SEMI
|
|
;
|
|
|
|
targetConstraint
|
|
: ATOM identifier
|
|
| INTERFACE identifier typeArguments?
|
|
| OBJECT identifier
|
|
;
|
|
|
|
packageResourceDecl
|
|
: resourcePreamble* PACKAGE identifier ID stringLiteral REVISION stringLiteral
|
|
(SEMANTIC_MAJOR INTEGER)?
|
|
LBRACE packageExport* RBRACE
|
|
;
|
|
|
|
packageExport
|
|
: packageOperationExport
|
|
| packageFunctionExport
|
|
| packageConstructorExport
|
|
| packageQuery
|
|
| packageQuerySpecialization
|
|
;
|
|
|
|
packageQuery
|
|
: QUERY identifier typeParameters? ID stringLiteral ROOT interfaceType
|
|
DOCUMENT stringLiteral OPERATION stringLiteral LBRACE queryClause* RBRACE
|
|
;
|
|
|
|
packageQuerySpecialization
|
|
: QUERY identifier ID stringLiteral SPECIALIZE identifier typeArguments SEMI
|
|
;
|
|
|
|
queryClause
|
|
: FRAGMENTS stringLiteral SEMI
|
|
| VIEW OBJECT? identifier AS interfaceType SEMI
|
|
| MAX identifier INTEGER SEMI
|
|
| ALLOW interfaceType DOT identifier identifier stringLiteral SEMI
|
|
| WATCH SEMI
|
|
| POLL INTEGER stringLiteral SEMI
|
|
;
|
|
|
|
packageOperationExport
|
|
: OPERATION identifier typeParameters? ID stringLiteral COLON valueType ARROW valueType
|
|
MODE operationMode eventClause? RECEIVER receiverRequirement dependencyBlock? SEMI
|
|
;
|
|
|
|
packageFunctionExport
|
|
: FUNCTION identifier typeParameters? ID stringLiteral COLON valueType ARROW valueType
|
|
dependencyBlock? SEMI
|
|
;
|
|
|
|
packageConstructorExport
|
|
: CONSTRUCTOR identifier ID stringLiteral CONSTRUCTS identifier COLON valueType
|
|
dependencyBlock? SEMI
|
|
;
|
|
|
|
eventClause
|
|
: EMITS valueType
|
|
;
|
|
|
|
operationMode
|
|
: CALL
|
|
| WATCH_START
|
|
| WATCH_STOP
|
|
| SUBSCRIBE
|
|
| UNSUBSCRIBE
|
|
;
|
|
|
|
receiverRequirement
|
|
: ANY
|
|
| ATOM identifier
|
|
| OBJECT identifier
|
|
| INTERFACES LBRACK (interfaceType (COMMA interfaceType)*)? RBRACK
|
|
;
|
|
|
|
identifierList
|
|
: identifier (COMMA identifier)*
|
|
;
|
|
|
|
dependencyBlock
|
|
: REQUIRES LBRACE dependencyPort* RBRACE
|
|
;
|
|
|
|
dependencyPort
|
|
: STATE identifier ID stringLiteral COLON valueType primitiveList SEMI
|
|
| EDGE identifier ID stringLiteral COLON cardinality targetConstraint primitiveList SEMI
|
|
| INTERFACE identifier ID stringLiteral COLON identifier typeArguments? SEMI
|
|
| CONSTRUCTOR identifier ID stringLiteral COLON identifier (INPUT valueType)? SEMI
|
|
| QUERY identifier ID stringLiteral COLON identifier DOT identifier SEMI
|
|
;
|
|
|
|
primitiveList
|
|
: LBRACK primitive (COMMA primitive)* RBRACK
|
|
;
|
|
|
|
primitive
|
|
: READ
|
|
| WRITE
|
|
| RESOLVE
|
|
| CONNECT
|
|
| DISCONNECT
|
|
| WATCH_START
|
|
| WATCH_STOP
|
|
;
|
|
|
|
sharedAttachmentDecl
|
|
: SHARED attachmentDecl
|
|
;
|
|
|
|
attachmentDecl
|
|
: stateDecl
|
|
| edgeDecl
|
|
;
|
|
|
|
stateDecl
|
|
: STATE identifier ID stringLiteral ON identifier COLON valueType
|
|
POLICY storagePolicy (DEFAULT jsonLiteral)? SEMI
|
|
;
|
|
|
|
storagePolicy
|
|
: OPTIMISTIC_REGISTER
|
|
| CRDT LPAREN valueType RPAREN
|
|
;
|
|
|
|
edgeDecl
|
|
: EDGE identifier ID stringLiteral LBRACE edgeEndpoint edgeEndpoint RBRACE
|
|
;
|
|
|
|
edgeEndpoint
|
|
: targetConstraint PROJECTION identifier ID stringLiteral cardinality ORDERED?
|
|
(ON_DELETE stringLiteral)? RETAIN_OTHER? (KEYED stringLiteral)? PUBLIC_TRAVERSAL? SEMI
|
|
;
|
|
|
|
conformanceDecl
|
|
: CONFORM identifier AS identifier typeArguments? (ID stringLiteral)? (SEMANTIC_MAJOR INTEGER)?
|
|
LBRACE conformanceItem* RBRACE
|
|
;
|
|
|
|
conformanceItem
|
|
: PRIVATE attachmentDecl
|
|
| operationBindingDecl
|
|
| stateFieldBindingDecl
|
|
| relationshipMaterializationDecl
|
|
;
|
|
|
|
stateFieldBindingDecl
|
|
: BIND identifier TO STATE identifier SEMI
|
|
;
|
|
|
|
relationshipMaterializationDecl
|
|
: MATERIALIZE identifier IF ABSENT USING CONSTRUCTOR identifier VIA EDGE identifier DOT identifier SEMI
|
|
;
|
|
|
|
operationBindingDecl
|
|
: BIND memberOperationRef TO operationProvider (QUERY_REASON stringLiteral)? SEMI
|
|
;
|
|
|
|
memberOperationRef
|
|
: identifier DOT operationName
|
|
;
|
|
|
|
operationName
|
|
: identifier
|
|
| CALL
|
|
| GET
|
|
| SET
|
|
| RESOLVE
|
|
| CONNECT
|
|
| DISCONNECT
|
|
| WATCH_START
|
|
| WATCH_STOP
|
|
| SUBSCRIBE
|
|
| UNSUBSCRIBE
|
|
;
|
|
|
|
operationProvider
|
|
: STATE identifier DOT statePrimitive
|
|
| EDGE identifier DOT identifier DOT edgePrimitive
|
|
| PACKAGE identifier DOT identifier typeArguments? dependencyBindingBlock?
|
|
;
|
|
|
|
statePrimitive
|
|
: READ
|
|
| WRITE
|
|
| WATCH_START
|
|
| WATCH_STOP
|
|
;
|
|
|
|
edgePrimitive
|
|
: RESOLVE
|
|
| CONNECT
|
|
| DISCONNECT
|
|
| WATCH_START
|
|
| WATCH_STOP
|
|
;
|
|
|
|
dependencyBindingBlock
|
|
: WITH LBRACE dependencyBinding* RBRACE
|
|
;
|
|
|
|
dependencyBinding
|
|
: identifier TO STATE identifier (VIA EDGE identifier DOT identifier)? SEMI
|
|
| identifier TO EDGE identifier DOT identifier (VIA EDGE identifier DOT identifier)? SEMI
|
|
| identifier TO INTERFACE identifier typeArguments? (VIA EDGE identifier DOT identifier)? SEMI
|
|
| identifier TO CONSTRUCTOR identifier SEMI
|
|
| identifier TO QUERY identifier DOT identifier (VIA EDGE identifier DOT identifier)? SEMI
|
|
;
|
|
|
|
constructorBindingDecl
|
|
: CONSTRUCTOR identifier TO identifier DOT identifier dependencyBindingBlock? SEMI
|
|
;
|
|
|
|
valueType
|
|
: scalarType
|
|
| UNIT
|
|
| WATCH_HANDLE
|
|
| MESSAGE stringLiteral
|
|
| ATOM_REF LT identifier GT
|
|
| INTERFACE_REF LT identifier typeArguments? GT
|
|
| REF LT identifier GT
|
|
| OPTIONAL LT valueType GT
|
|
| LIST LT valueType GT
|
|
| RECORD LBRACE recordField* RBRACE
|
|
| identifier typeArguments?
|
|
;
|
|
|
|
recordField
|
|
: identifier COLON valueType SEMI
|
|
;
|
|
|
|
scalarType
|
|
: BOOL
|
|
| BYTES
|
|
| DOUBLE
|
|
| INT32
|
|
| INT64
|
|
| STRING
|
|
| UINT32
|
|
| UINT64
|
|
;
|
|
|
|
cardinality
|
|
: OPTIONAL_ONE
|
|
| EXACTLY_ONE
|
|
| MANY
|
|
| MANY_UNIQUE
|
|
;
|
|
|
|
jsonLiteral
|
|
: stringLiteral
|
|
| INTEGER
|
|
| JSON_NUMBER
|
|
| TRUE
|
|
| FALSE
|
|
| NULL
|
|
| jsonObject
|
|
| jsonArray
|
|
;
|
|
|
|
jsonObject
|
|
: LBRACE (jsonMember (COMMA jsonMember)*)? RBRACE
|
|
;
|
|
|
|
jsonMember
|
|
: stringLiteral COLON jsonLiteral
|
|
;
|
|
|
|
jsonArray
|
|
: LBRACK (jsonLiteral (COMMA jsonLiteral)*)? RBRACK
|
|
;
|
|
|
|
identifier
|
|
: IDENTIFIER
|
|
| SOURCE
|
|
| QUERY
|
|
| SPECIALIZE
|
|
| ROOT
|
|
| DOCUMENT
|
|
| FRAGMENTS
|
|
| VIEW
|
|
| MAX
|
|
| ALLOW
|
|
| POLL
|
|
| RPC
|
|
| QUERYABLE
|
|
| RESULT_BYTES
|
|
| RPC_CALLS
|
|
| DEADLINE_MS
|
|
;
|
|
|
|
stringLiteral
|
|
: STRING_LITERAL
|
|
;
|
|
|
|
WORKSPACE: 'workspace';
|
|
RESULT_BYTES: 'result-bytes';
|
|
RPC_CALLS: 'rpc-calls';
|
|
DEADLINE_MS: 'deadline-ms';
|
|
QUERY: 'query';
|
|
SPECIALIZE: 'specialize';
|
|
ROOT: 'root';
|
|
DOCUMENT: 'document';
|
|
FRAGMENTS: 'fragments';
|
|
VIEW: 'view';
|
|
MAX: 'max';
|
|
ALLOW: 'allow';
|
|
POLL: 'poll';
|
|
QUERYABLE: 'queryable';
|
|
RPC: 'rpc';
|
|
QUERY_REASON: 'query-reason';
|
|
TYPE: 'type';
|
|
OBJECT: 'object';
|
|
STORABLE: 'storable';
|
|
IMPLEMENTS: 'implements';
|
|
REF: 'ref';
|
|
FRAGMENT: 'fragment';
|
|
IMPORT: 'import';
|
|
EXTERNAL: 'external';
|
|
ATOM: 'atom';
|
|
INTERFACE: 'interface';
|
|
INTERFACES: 'interfaces';
|
|
PACKAGE: 'package';
|
|
VALUE: 'value';
|
|
RELATION: 'relation';
|
|
OPERATION: 'operation';
|
|
FUNCTION: 'function';
|
|
CONSTRUCTOR: 'constructor';
|
|
CONSTRUCTS: 'constructs';
|
|
INPUT: 'input';
|
|
CONFORM: 'conform';
|
|
AS: 'as';
|
|
BIND: 'bind';
|
|
STATIC: 'static';
|
|
TO: 'to';
|
|
PRIVATE: 'private';
|
|
SHARED: 'shared';
|
|
STATE: 'state';
|
|
EDGE: 'edge';
|
|
PROJECTION: 'projection';
|
|
WITH: 'with';
|
|
USING: 'using';
|
|
VIA: 'via';
|
|
MATERIALIZE: 'materialize';
|
|
IF: 'if';
|
|
ABSENT: 'absent';
|
|
ON: 'on';
|
|
POLICY: 'policy';
|
|
DEFAULT: 'default';
|
|
SOURCE: 'source';
|
|
REPOSITORY: 'repository';
|
|
COMMIT: 'commit';
|
|
REVISION: 'revision';
|
|
SEMANTIC_MAJOR: 'semantic-major';
|
|
ON_DELETE: 'on-delete';
|
|
RETAIN_OTHER: 'retain-other';
|
|
KEYED: 'keyed';
|
|
PUBLIC_TRAVERSAL: 'public-traversal';
|
|
ID: 'id';
|
|
DOC: 'doc';
|
|
MODE: 'mode';
|
|
EMITS: 'emits';
|
|
RECEIVER: 'receiver';
|
|
REQUIRES: 'requires';
|
|
ANY: 'any';
|
|
GET: 'get';
|
|
SET: 'set';
|
|
WATCH: 'watch';
|
|
START: 'start';
|
|
STOP: 'stop';
|
|
READ: 'read';
|
|
WRITE: 'write';
|
|
RESOLVE: 'resolve';
|
|
CONNECT: 'connect';
|
|
DISCONNECT: 'disconnect';
|
|
CALL: 'call';
|
|
WATCH_START: 'watch-start';
|
|
WATCH_STOP: 'watch-stop';
|
|
SUBSCRIBE: 'subscribe';
|
|
UNSUBSCRIBE: 'unsubscribe';
|
|
OPTIMISTIC_REGISTER: 'optimistic-register';
|
|
CRDT: 'crdt';
|
|
OPTIONAL_ONE: 'optional-one';
|
|
EXACTLY_ONE: 'exactly-one';
|
|
MANY_UNIQUE: 'many-unique';
|
|
MANY: 'many';
|
|
ORDERED: 'ordered';
|
|
UNIT: 'unit';
|
|
WATCH_HANDLE: 'watch-handle';
|
|
MESSAGE: 'message';
|
|
ATOM_REF: 'atom-ref';
|
|
INTERFACE_REF: 'interface-ref';
|
|
OPTIONAL: 'optional';
|
|
LIST: 'list';
|
|
RECORD: 'record';
|
|
BOOL: 'bool';
|
|
BYTES: 'bytes';
|
|
DOUBLE: 'double';
|
|
INT32: 'int32';
|
|
INT64: 'int64';
|
|
STRING: 'string';
|
|
UINT32: 'uint32';
|
|
UINT64: 'uint64';
|
|
TRUE: 'true';
|
|
FALSE: 'false';
|
|
NULL: 'null';
|
|
|
|
ARROW: '->';
|
|
COLON: ':';
|
|
SEMI: ';';
|
|
COMMA: ',';
|
|
DOT: '.';
|
|
LBRACE: '{';
|
|
RBRACE: '}';
|
|
LBRACK: '[';
|
|
RBRACK: ']';
|
|
LPAREN: '(';
|
|
RPAREN: ')';
|
|
LT: '<';
|
|
GT: '>';
|
|
AMP: '&';
|
|
EQUAL: '=';
|
|
|
|
INTEGER: '-'? [0-9]+;
|
|
JSON_NUMBER: '-'? ('0' | [1-9] [0-9]*) ('.' [0-9]+)? ([eE] [+-]? [0-9]+)?;
|
|
IDENTIFIER: [A-Za-z_] [A-Za-z0-9_]*;
|
|
STRING_LITERAL: '"' (ESC | ~["\\\r\n])* '"';
|
|
fragment ESC: '\\' (["\\/bfnrt] | 'u' HEX HEX HEX HEX);
|
|
fragment HEX: [0-9a-fA-F];
|
|
|
|
LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
|
|
BLOCK_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
|
|
WS: [ \t\r\n]+ -> channel(HIDDEN);
|