\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)}