-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Using this https://github.com/GuntherRademacher/ebnf-convert and https://github.com/GuntherRademacher/rr we can generate a nice navigable railroad diagram for Numscript grammar (see bellow instructions at the top).
/* converted on Thu Sep 19, 2024, 22:57 (UTC+02) by antlr_4-to-w3c v0.68-SNAPSHOT which is Copyright (c) 2011-2024 by Gunther Rademacher <grd@gmx.net> */
//
// EBNF to be viewd at
// (IPV6) https://www.bottlecaps.de/rr/ui
// (IPV4) https://rr.red-dove.com/ui
//
// Copy and paste this at one of the urls shown above in the 'Edit Grammar' tab
// then click the 'View Diagram' tab.
//
program ::= varsDeclaration? statement* EOF
monetaryLit
::= '[' literal literal ']'
portion ::= RATIO_PORTION_LITERAL
| PERCENTAGE_PORTION_LITERAL
literal ::= ASSET
| STRING
| ACCOUNT
| VARIABLE_NAME
| NUMBER
| monetaryLit
| portion
functionCallArgs
::= literal ( ',' literal )*
functionCall
::= IDENTIFIER '(' functionCallArgs? ')'
varOrigin
::= '=' functionCall
varDeclaration
::= IDENTIFIER VARIABLE_NAME varOrigin?
varsDeclaration
::= 'vars' '{' varDeclaration* '}'
sentAllLit
::= '[' literal '*' ']'
cap ::= monetaryLit
| VARIABLE_NAME
allotment
::= portion
| VARIABLE_NAME
| 'remaining'
source ::= literal ( 'allowing' ( 'unbounded' 'overdraft' | 'overdraft' 'up' 'to' literal ) )?
| '{' ( allotmentClauseSrc* | source+ ) '}'
| 'max' cap 'from' source
allotmentClauseSrc
::= allotment 'from' source
keptOrDestination
::= 'to' destination
| 'kept'
destinationInOrderClause
::= 'max' literal keptOrDestination
destination
::= literal
| '{' ( allotmentClauseDest+ | destinationInOrderClause* 'remaining' keptOrDestination ) '}'
allotmentClauseDest
::= allotment keptOrDestination
sentValue
::= literal
| sentAllLit
statement
::= 'send' sentValue '(' 'source' '=' source 'destination' '=' destination ')'
| functionCall
_ ::= WS
| MULTILINE_COMMENT
| LINE_COMMENT
/* ws: definition */
<?TOKENS?>
WS ::= [ #x9#xd#xa]+
NEWLINE ::= [#xd#xa]+
MULTILINE_COMMENT
::= '/*' ( MULTILINE_COMMENT | . )* '*/'
LINE_COMMENT?
::= '//' .* NEWLINE
RATIO_PORTION_LITERAL
::= [0-9]+ ' '? '/' ' '? [0-9]+
PERCENTAGE_PORTION_LITERAL
::= [0-9]+ ( '.' [0-9]+ )? '%'
STRING ::= '"' ( '\"' | [^"#xd#xa] )* '"'
IDENTIFIER
::= [a-z]+ [a-z_]*
NUMBER ::= [0-9]+
VARIABLE_NAME
::= '$' [a-z_]+ [a-z0-9_]*
ACCOUNT ::= '@' [a-zA-Z0-9_#x2D] ( ':'? [a-zA-Z0-9_#x2D] )*
ASSET ::= [A-Z/0-9]+
EOF ::= $
Metadata
Metadata
Assignees
Labels
No labels