Slang v1.0 Syntax Diagrams
Module:
Module ::= Procedure+
no referencesProcedure:
Procedure
::= FUNCTION type func_name '(' arglist ')' stmts END
referenced by:
Module
type:
type ::= NUMERIC
| STRING
| BOOLEAN
referenced by:
Procedure
arglist
vardeclstmt
arglist:
arglist ::= '(' ( type arg_name | ',' )* ')'
referenced by:
Procedure
stmts:
stmts ::= stmt+
referenced by:
Procedure
ifstmt
whilestmt
stmt:
stmt ::= vardeclstmt
| printstmt
| assignmentstmt
| callstmt
| ifstmt
| whilestmt
| returnstmt
referenced by:
stmts
vardeclstmt:
vardeclstmt
::= type variable ';'
referenced by:
stmt
printstmt:
printstmt
::= PRINT expr ';'
referenced by:
stmt
assignmentstmt:
assignmentstmt
::= variable '=' value ';'
referenced by:
stmt
ifstmt:
ifstmt ::= IF '(' expr ')' THEN stmts ( | ELSE stmts ) ENDIF
referenced by:
stmt
whilestmt:
whilestmt
::= WHILE '(' expr ')' stmts WEND
referenced by:
stmt
returnstmt:
returnstmt
::= Return expr ';'
referenced by:
stmt
expr:
expr ::= BExpr
referenced by:
Factor
ifstmt
printstmt
returnstmt
whilestmt
BExpr:
BExpr ::= LExpr LOGIC_OP BExpr
referenced by:
BExpr
expr
LExpr:
LExpr ::= RExpr REL_OP LExpr
referenced by:
BExpr
LExpr
RExpr:
RExpr ::= Term ADD_OP RExpr
referenced by:
LExpr
RExpr
Term:
Term ::= Factor MUL_OP Term
referenced by:
RExpr
Term
Factor:
Factor ::= NUMERIC
| STRING
| TRUE
| FALSE
| variable
| '(' expr ')'
| ( '+' | '-' | '!' ) Factor
| callexpr
referenced by:
Factor
Term
callexpr:
callexpr ::= funcname '(' actuals ')'
referenced by:
Factor
LOGIC_OP:
LOGIC_OP ::= '&&'
| '||'
referenced by:
BExpr
REL_OP:
REL_OP ::= '>'
| '<'
| '>='
| '<='
| '<>'
| '=='
referenced by:
LExpr
MUL_OP:
MUL_OP ::= '*'
| '/'
referenced by:
Term
ADD_OP:
ADD_OP ::= '+'
| '-'
referenced by:
RExpr
... generated by Railroad Diagram Generator