Exp: Term Binop If Let Map Exp ::= Term ( Binop Term )* | If | Let | Map referenced by: Def ExpList Factor If Let Map If: if Exp then Exp else Exp If ::= if Exp then Exp else Exp referenced by: Exp Let: let Def in Exp Let ::= let Def+ in Exp referenced by: Exp Map: map IdList to Exp Map ::= map IdList to Exp referenced by: Exp Term: Unop Factor ( ExpList ) Null Int Bool Term ::= Unop?* ( Factor ( '(' ExpList ')' )? | Null | Int | Bool ) referenced by: Exp Factor: ( Exp ) Prim Id Factor ::= '(' Exp ')' | Prim | Id referenced by: Term ExpList: Exp , ExpList ::= ( Exp ( ',' Exp )* )? referenced by: Term IdList: Id , IdList ::= ( Id ( ',' Id )* )? referenced by: Map Def: Id := Exp ; Def ::= Id ':=' Exp ';' referenced by: Let Null: null Null ::= null referenced by: Term Bool: true false Bool ::= true | false referenced by: Term Unop: Sign ~ Unop ::= Sign | '~' referenced by: Term Sign: + - Sign ::= '+' | '-' referenced by: Binop Unop Binop: Sign * / = != < > <= >= & | Binop ::= Sign | '*' | '/' | '=' | '!=' | '<' | '>' | '<=' | '>=' | '&' | '|' referenced by: Exp Prim: number? function? list? null? cons? cons first rest arity Prim ::= 'number?' | 'function?' | 'list?' | 'null?' | 'cons?' | 'cons' | 'first' | 'rest' | 'arity' referenced by: Factor   ... generated by Railroad Diagram Generator R R