\unitlength0.2mm
\begin{picture}(640,400)
\put(  40, 120){\circle{  60}}
\put(  90,  90){\framebox( 110,  60){Scan source}}
\put( 220,  90){\framebox( 150,  60){Build symbol table}}
\put( 390,  90){\framebox(  80,  60){Analyse}}
\put( 490,  90){\framebox( 110,  60){Generate Code}}
\put( 545,  55){\circle{  20}}
\put( 220,  10){\dashbox{5}( 150,  40){Symbol table}}
\put( 390,  10){\framebox( 110,  40){Output errors}}
\put( 545,  30){\circle{  20}}
\put(-10, 160){Source program}
\put(  70, 120){\vector(   1,0){  20}}
\put( 200, 120){\vector(   1,0){  20}}
\put( 295,  90){\vector(0,-1){  40}}
\put( 370,  50){\vector(   1,   2){  20}}
\put( 370, 120){\vector(   1,0){  20}}
\put( 470, 120){\vector(   1,0){  20}}
\put( 430,  90){\vector(0,-1){  40}}
\put( 545,  90){\vector(0,-1){  25}}
\put( 500,  30){\vector(   1,0){  35}}
\put( 300,  70){Symbols}
\put( 390,  65){Error indicator}
\put( 543,  52){Object code}
\put( 543,  28){Error messages}
\put( 190, 185){Functional view of a compiler}
\end{picture}
