\usepackage{tikz}
\def\program#1#2{-- ++(1.5,0) -- ++(0,1) arc(-90:90:0.5) -- ++(-1.5,0) arc(90:270:0.5) -- ++(0,-1) ++(0.75,0.5) node{#2} ++(0,1) node{#1} ++(-0.75,-1.5)}
\def\translator#1#2#3{-- ++(1.5,0) -- ++(0,1) -- ++(0.7,0) -- ++(0,1) -- ++(-2.9,0) -- ++(0,-1) -- ++(0.7,0) -- ++(0,-1) ++(0,1.5) node{#1} ++(0.75,0) node{$\longrightarrow$} ++(0.75,0) node{#2} ++(-0.75,-1) node{#3} ++(-0.75,-0.5)}
\def\machine#1{-- ++(0.75,-0.5) -- ++(0.75,0.5) -- ++(0,1) -- ++(-1.5,0) -- ++(0,-1) ++(0.75,0.5) node{#1} ++(-0.75,-0.5)}
\def\run#1{++(0,1) #1 ++(0,-1)}
\def\runover#1{++(0,-1) \machine{#1} ++(0,1)} 
\def\source#1{++(-2.2,1) #1 ++(2.2,-1)}
\def\object#1{++(2.2,1) #1 ++(-2.2,-1)}
\def\interpreter#1#2{-- ++(1.5,0) -- ++(0,2) -- ++(-1.5,0) -- ++(0,-2) ++(0.75,0.5) node{#2} ++(0,1) node{#1} ++(-0.75,-1.5)}
\def\interpret#1{++(0,2) #1 ++(0,-2)}
\def\nexttranslator#1{++(4.4,0) #1 ++(-4.4,0)}
