-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathNumscript.g4
More file actions
76 lines (61 loc) · 2.75 KB
/
Numscript.g4
File metadata and controls
76 lines (61 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
grammar Numscript;
options {
tokenVocab = 'Lexer';
}
monetaryLit:
LBRACKET (asset = valueExpr) (amt = valueExpr) RBRACKET;
accountLiteralPart:
ACCOUNT_TEXT # accountTextPart
| VARIABLE_NAME_ACC # accountVarPart;
valueExpr:
VARIABLE_NAME # variableExpr
| ASSET # assetLiteral
| STRING # stringLiteral
| ACCOUNT_START accountLiteralPart (COLON accountLiteralPart)* # accountLiteral
| NUMBER # numberLiteral
| PERCENTAGE_PORTION_LITERAL # percentagePortionLiteral
| monetaryLit # monetaryLiteral
| op=MINUS valueExpr # prefixExpr
| left = valueExpr op = DIV right = valueExpr # infixExpr
| left = valueExpr op = (PLUS | MINUS) right = valueExpr # infixExpr
| LPARENS valueExpr RPARENS # parenthesizedExpr
| functionCall # application;
functionCallArgs: valueExpr ( COMMA valueExpr)*;
functionCall:
fnName = (OVERDRAFT | IDENTIFIER) LPARENS functionCallArgs? RPARENS;
varOrigin: EQ valueExpr;
varDeclaration:
type_ = IDENTIFIER name = VARIABLE_NAME varOrigin?;
varsDeclaration: VARS LBRACE varDeclaration* RBRACE;
featureDecl: HASH_BANG LBRACKET FEATURE LPARENS (flag+=STRING (COMMA flag+=STRING)*)? RPARENS RBRACKET;
program: featureDecl? varsDeclaration? statement* EOF;
sentAllLit: LBRACKET (asset = valueExpr) STAR RBRACKET;
allotment:
valueExpr # portionedAllotment
| REMAINING # remainingAllotment;
colorConstraint: RESTRICT valueExpr;
source
: address = valueExpr colorConstraint? ALLOWING UNBOUNDED OVERDRAFT # srcAccountUnboundedOverdraft
| address = valueExpr colorConstraint? ALLOWING OVERDRAFT UP TO maxOvedraft = valueExpr #srcAccountBoundedOverdraft
| address = valueExpr WITH SCALING THROUGH swap=valueExpr # srcAccountWithScaling
| valueExpr colorConstraint? # srcAccount
| LBRACE allotmentClauseSrc+ RBRACE # srcAllotment
| LBRACE source* RBRACE # srcInorder
| ONEOF LBRACE source+ RBRACE # srcOneof
| MAX cap = valueExpr FROM source # srcCapped;
allotmentClauseSrc: allotment FROM source;
keptOrDestination:
TO destination # destinationTo
| KEPT # destinationKept;
destinationInOrderClause: MAX valueExpr keptOrDestination;
destination:
valueExpr # destAccount
| LBRACE allotmentClauseDest+ RBRACE # destAllotment
| LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destInorder
| ONEOF LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destOneof;
allotmentClauseDest: allotment keptOrDestination;
sentValue: valueExpr # sentLiteral | sentAllLit # sentAll;
statement:
SEND sentValue LPARENS SOURCE EQ source DESTINATION EQ destination RPARENS # sendStatement
| SAVE sentValue FROM valueExpr # saveStatement
| functionCall # fnCallStatement;