1
1
grammar Numscript;
2
2
3
- // Tokens
4
- WS : [ \t\r\n]+ -> skip;
5
- NEWLINE : [\r\n]+;
6
- MULTILINE_COMMENT : ' /*' (MULTILINE_COMMENT | .)*? ' */' -> skip;
7
- LINE_COMMENT : ' //' .*? NEWLINE -> skip;
8
-
9
- VARS : ' vars' ;
10
- MAX : ' max' ;
11
- SOURCE : ' source' ;
12
- DESTINATION : ' destination' ;
13
- SEND : ' send' ;
14
- FROM : ' from' ;
15
- UP : ' up' ;
16
- TO : ' to' ;
17
- REMAINING : ' remaining' ;
18
- ALLOWING : ' allowing' ;
19
- UNBOUNDED : ' unbounded' ;
20
- OVERDRAFT : ' overdraft' ;
21
- KEPT : ' kept' ;
22
- SAVE : ' save' ;
23
- LPARENS : ' (' ;
24
- RPARENS : ' )' ;
25
- LBRACKET : ' [' ;
26
- RBRACKET : ' ]' ;
27
- LBRACE : ' {' ;
28
- RBRACE : ' }' ;
29
- COMMA : ' ,' ;
30
- EQ : ' =' ;
31
- STAR : ' *' ;
32
- MINUS : ' -' ;
33
-
34
- PERCENTAGE_PORTION_LITERAL : [0-9]+ (' .' [0-9]+)? ' %' ;
35
-
36
- STRING : ' "' (' \\ "' | ~[\r\n" ])* '" ' ;
37
-
38
- IDENTIFIER: [a-z]+ [a-z_]*;
39
- NUMBER: MINUS? [0-9]+ (' _ ' [0-9]+)*;
40
- VARIABLE_NAME: ' $' [a-z_]+ [a-z0-9_]*;
41
- ACCOUNT: ' @' [a-zA-Z0-9_-]+ (' :' [a-zA-Z0-9_-]+)*;
42
- ASSET: [A-Z][A-Z0-9]* (' /' [0-9]+)?;
3
+ options {
4
+ tokenVocab = ' Lexer' ;
5
+ }
43
6
44
7
monetaryLit :
45
8
LBRACKET (asset = valueExpr) (amt = valueExpr) RBRACKET ;
46
9
10
+ accountLiteralPart :
11
+ ACCOUNT_TEXT # accountTextPart
12
+ | VARIABLE_NAME_ACC # accountVarPart;
13
+
47
14
valueExpr :
48
- VARIABLE_NAME # variableExpr
49
- | ASSET # assetLiteral
50
- | STRING # stringLiteral
51
- | ACCOUNT # accountLiteral
52
- | NUMBER # numberLiteral
53
- | PERCENTAGE_PORTION_LITERAL # percentagePortionLiteral
54
- | monetaryLit # monetaryLiteral
55
- | left = valueExpr op = ' / ' right = valueExpr # infixExpr
56
- | left = valueExpr op = (' + ' | ' - ' ) right = valueExpr # infixExpr
57
- | ' ( ' valueExpr ' ) ' # parenthesizedExpr;
15
+ VARIABLE_NAME # variableExpr
16
+ | ASSET # assetLiteral
17
+ | STRING # stringLiteral
18
+ | ACCOUNT_START accountLiteralPart ( COLON accountLiteralPart)* # accountLiteral
19
+ | NUMBER # numberLiteral
20
+ | PERCENTAGE_PORTION_LITERAL # percentagePortionLiteral
21
+ | monetaryLit # monetaryLiteral
22
+ | left = valueExpr op = DIV right = valueExpr # infixExpr
23
+ | left = valueExpr op = (PLUS | MINUS ) right = valueExpr # infixExpr
24
+ | LPARENS valueExpr RPARENS # parenthesizedExpr;
58
25
59
26
functionCallArgs : valueExpr ( COMMA valueExpr)*;
60
27
functionCall :
@@ -80,7 +47,7 @@ source:
80
47
| valueExpr # srcAccount
81
48
| LBRACE allotmentClauseSrc+ RBRACE # srcAllotment
82
49
| LBRACE source* RBRACE # srcInorder
83
- | ' oneof ' LBRACE source+ RBRACE # srcOneof
50
+ | ONEOF LBRACE source+ RBRACE # srcOneof
84
51
| MAX cap = valueExpr FROM source # srcCapped;
85
52
allotmentClauseSrc : allotment FROM source;
86
53
@@ -90,10 +57,10 @@ keptOrDestination:
90
57
destinationInOrderClause : MAX valueExpr keptOrDestination;
91
58
92
59
destination :
93
- valueExpr # destAccount
94
- | LBRACE allotmentClauseDest+ RBRACE # destAllotment
95
- | LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destInorder
96
- | ' oneof ' LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destOneof;
60
+ valueExpr # destAccount
61
+ | LBRACE allotmentClauseDest+ RBRACE # destAllotment
62
+ | LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destInorder
63
+ | ONEOF LBRACE destinationInOrderClause* REMAINING keptOrDestination RBRACE # destOneof;
97
64
allotmentClauseDest : allotment keptOrDestination;
98
65
99
66
sentValue : valueExpr # sentLiteral | sentAllLit # sentAll;
0 commit comments