Module
Railroad diagram
func
identifier
(
identifier
,
identifier
)
BlockExpr
func
Railroad diagram
func
not
identPart
identifier
Railroad diagram
not
if
else
func
let
while
and
or
identStart
identPart
BlockExpr
Railroad diagram
{
Statement
Expr
}
identPart
Railroad diagram
identStart
digit
if
Railroad diagram
if
not
identPart
else
Railroad diagram
else
not
identPart
let
Railroad diagram
let
not
identPart
while
Railroad diagram
while
not
identPart
and
Railroad diagram
and
not
identPart
or
Railroad diagram
or
not
identPart
identStart
Railroad diagram
letter
_
Statement
Railroad diagram
let
identifier
=
Expr
;
IfStatement
while
Expr
BlockStatements
Expr
;
Expr
Railroad diagram
identifier
:=
Expr
PrimaryExpr
+
-
*
/
==
!=
<=
<
>=
>
and
or
PrimaryExpr
IfStatement
Railroad diagram
if
Expr
BlockStatements
else
BlockStatements
IfStatement
BlockStatements
Railroad diagram
{
Statement
}
PrimaryExpr
Railroad diagram
(
Expr
)
digit
identifier
(
Expr
,
Expr
)
identifier
IfExpr
IfExpr
Railroad diagram
if
Expr
BlockExpr
else
BlockExpr
IfExpr