statemachine: parser
[hwmod.git] / spec / sm / parser.tex
1 \documentclass{minimal}
2 \pagestyle{empty}
3
4 \usepackage{pstricks}
5 \usepackage{pst-node}
6
7 \begin{document}
8
9 \begin{psmatrix}[mnode=oval, colsep=1.91cm, rowsep=1cm]
10 [mnode=R,name=vars]{\shortstack[l]{int s, z, c,\\\, strich, punkt;\\opcode aktop,opp;}} &
11 [name=calc]{\shortstack{\textbf{calc}\\z:=z*10\\+(c-'0');}} &
12 [name=null]{\shortstack{\textbf{null}\\aktop:=DONE;}} \\
13 %%
14 [mnode=R,name=res]{sys\_res} &
15 [name=sign]{\shortstack{\textbf{sign}\\s:=-1;}} &
16 [name=alu]{
17         \shortstack{
18                 \textbf{ALU}\\
19                 siehe Codeschnipsel
20         }
21 } \\
22 %%
23 [name=idle]{\shortstack{\textbf{idle}\\strich:=0;\\punkt:=1;\\opp:=NOP;}} &
24 [name=read]{\shortstack{\textbf{read char}\\z:=0;\\s:=1;}} &
25 [name=done]{\shortstack{\textbf{done}}} \\
26 %%
27 [mnode=R,name=void]{} &
28 [name=err]{\shortstack{\textbf{error}}} \\
29 \end{psmatrix}
30
31 \psset{arrows=->, shortput=nab}
32
33 \ncline[linestyle=dotted]{res}{idle}
34 \ncline[linestyle=dotted]{void}{err}
35 \ncarc[arcangle=24]{done}{idle}
36 \ncarc[arcangle=0]{err}{idle}
37
38 \ncarc[arcangle=0]{idle}{read}\ncput*[npos=.50]{do\_it$\uparrow$}
39 \nccurve[angleA=45,angleB=75,ncurvA=2,ncurvB=2]{read}{read}\ncput*{' '}
40 \ncarc[arcangle=0]{read}{sign}\ncput*[npos=.50]{'-'}
41
42 \ncarc[arcangle=0]{sign}{calc}
43 \ncarc[arcangle=50]{read}{calc}\ncput*[npos=.35]{c = '0'\dots{}'9'}
44 \nccircle[angleA=-20]{calc}{.78cm}\ncput*[npos=0.39]{c = '0'\dots{}'9'}
45 \nccircle[angleA=80,angleB=0,loopsize=0]{calc}{.66cm}\ncput*{' '}
46
47 \ncarc[arcangle=0]{calc}{alu}\ncput*[npos=.50]{aktop = '+','-','*','/'}
48 \ncarc[arcangle=0]{calc}{null}\ncput*[npos=.50]{aktop = '\textbackslash 0'}
49 \ncarc[arcangle=0]{null}{alu}
50
51 \ncarc[arcangle=0]{alu}{read}\ncput*[npos=.50]{calc\_done$\uparrow$}
52 \ncarc[arcangle=0]{alu}{done}\ncput*[npos=.50]{aktop == DONE}
53 \end{document}