::= (program * ) ::= (define (void>)) | (define-env (*)) // added by closure conversion | (define-label (lambda ()) // added by lambda-lifting ::= (void) | | | | (lambda (*) ) // removed by lambda-lifting | None | Ellipsis | $halt | #t | #f | (set *) | (dict ( )*) | (tuple *) | (py-list* *) // added by mutable variable elimination: | (make-cell ) | (get-cell ) // added by closure conversion: | (make-closure ) | (make-env ( )*) | (env-ref ) // added by lambda-lifting: | (label ) ::= (error ) | (if ) | (set-then! ) | ( *) | ((cps ) ) | ((cps ) ) | ((cps ) ) | ( *) // added by mutable variable elimination: | (set-cell! ) // added by closure conversion: | (app* *) ::= for-set-k | for-py-list-k | for-tuple-k | for-dict-k ::= py-list-set! | dict-set! | tuple-set! // Always produces error ::= < | > | equal? | >= | <= | not-equal? | in? | not-in? | eq? | not-eq? | << | >> | + | - | * | / | quotient | modulo | expt | assert2 | bitwise-and | bitwise-or | bitwise-xor | py-list-ref | py-list-remove! | tuple-ref | dict-ref | dict-remove! ::= bitwise-not | + | - | integer? | string? | tuple? | dict? | py-list? | set? | assert1 | py-print | not