Module

Railroad diagramfuncidentifier(Params)BlockExprexternfuncidentifier(Params);

func

Railroad diagramfuncnotidentPart

identifier

Railroad diagramnotifelsefuncletwhileandorexternidentStartidentPart

Params

Railroad diagramidentifier,identifier

BlockExpr

Railroad diagram{StatementExpr}

extern

Railroad diagramexternnotidentPart

identPart

Railroad diagramidentStartdigit

if

Railroad diagramifnotidentPart

else

Railroad diagramelsenotidentPart

let

Railroad diagramletnotidentPart

while

Railroad diagramwhilenotidentPart

and

Railroad diagramandnotidentPart

or

Railroad diagramornotidentPart

identStart

Railroad diagramletter_

Statement

Railroad diagramletidentifier=Expr;IfStatementwhileExprBlockStatementsExpr;

Expr

Railroad diagramidentifier:=Expridentifier[Expr]:=ExprPrimaryExpr+-*/==!=<=<>=>andorPrimaryExpr

IfStatement

Railroad diagramifExprBlockStatementselseBlockStatementsIfStatement

BlockStatements

Railroad diagram{Statement}

PrimaryExpr

Railroad diagram(Expr)digitidentifier(Expr,Expr)identifier[Expr]identifierIfExpr

IfExpr

Railroad diagramifExprBlockExprelseBlockExprIfExpr