1 \documentclass{minimal}
9 \begin{psmatrix}[mnode=oval, colsep=1.91cm, rowsep=1cm]
10 [mnode=R,name=vars]{\shortstack[l]{bool s=F,first=T;\\int z:=0, c,\\\, strich:=0, punkt:=1;\\opcode
12 [name=calc]{\shortstack{\textbf{calc}\\z:=z*10\\+(c-'0');}} &
13 [name=null]{\shortstack{\textbf{null}\\op:=DONE;}} \\
15 [mnode=R,name=res]{sys\_res} &
16 [name=sign]{\shortstack{\textbf{sign}\\s:=true;}} &
22 \, alu(ADD,z*s,strich);\\
25 \, alu(opd,z*s,strich);\\
33 [name=idle]{\shortstack{\textbf{idle}}} &
34 [name=read]{\shortstack{\textbf{read char}\\z:=0;\\s:=false;}} &
40 \, alu(MUL,z*s,punkt);\\
43 \, alu(opd,z*s,punkt);\\
51 [mnode=R,name=void]{} &
52 [name=err]{\shortstack{\textbf{error}}} &
53 [name=done]{\shortstack{\textbf{done}}} \\
56 \psset{arrows=->, shortput=nab}
58 \ncline[linestyle=dotted]{res}{idle}
59 \ncline[linestyle=dotted]{void}{err}
60 \ncarc[arcangle=10]{done}{idle}
61 \ncarc[arcangle=0]{err}{idle}
63 \ncarc[arcangle=0]{idle}{read}\ncput*[npos=.50]{do\_it$\uparrow$}
65 \ncarc[arcangle=0]{read}{sign}\ncput*[npos=.50]{'-'}
66 \ncarc[arcangle=0]{sign}{calc}
67 \ncarc[arcangle=35]{read}{calc}\ncput*[npos=.35]{c = '0'\dots{}'9'}
68 \nccircle[angle=0]{calc}{.8cm}\ncput*{c = '0'\dots{}'9'}
70 \ncarc[arcangle=15]{calc}{alu1}\ncput*[npos=.50]{op = '+','-'}
71 \ncarc[arcangle=-5]{calc}{alu2}\ncput*[npos=.30]{op = '*','/'}
73 \ncarc[arcangle=0]{calc}{null}\ncput*[npos=.50]{'\textbackslash 0'}
75 \ncarc[arcangle=0]{null}{alu1}\ncput*[npos=.50]{opd in ['+','-']}
76 \ncarc[arcangle=48]{null}{alu2}\ncput*[npos=.80]{opd in ['*','/']}
78 \ncarc[arcangle=0]{alu1}{read}\ncput*[npos=.50]{calc\_done$\uparrow$}
79 \ncarc[arcangle=20]{alu2}{read}\ncput*[npos=.50]{calc\_done$\uparrow$}
81 \ncarc[arcangle=80]{alu1}{done}\ncput*[npos=.50]{op == DONE}
82 \ncarc[arcangle=-60]{alu2}{done}\ncput*[npos=.66]{op == DONE}