% file: yacco2_stbl.mp input boxes beginfig(1); u=1cc; % char_pool pair sw,se,ne,nw; sw:=(0,0); se:=(1u,0); ne:=(1u,6u); nw:=(0,6u); draw sw--se--ne--nw--cycle; %outline the bytes pair zx,zy; for i=1 upto 5: zx:=(0,i*u);zy:=(1u,i*u); draw zx--zy; if i=5: pair ze,zw; ze:=(1u,6u);zw:=(0,6u); draw zx--ze; draw .5[zx,zy]--.5[zy,ze]; draw .5[zx,zw]--.5[zw,ze]; fi string d; d:=substring(i-1,i) of "Rbegn"; label.top(d,.5[zx-(0,1u),zy-(0,1u)]); string a;a:=decimal (i-1); defaultscale:=.6; label.lft(substring(0,1)of a,zx-(0,1u)); defaultscale:=1; endfor defaultscale:=.6; label.lft("5",(0,5u)); defaultscale:=1; label.bot(btex $char\_pool$ etex,(0,0u)); % stbl sw:=(5u,0); se:=(6u,0); ne:=(6u,4u); nw:=(5u,4u); draw sw--se--ne--nw--cycle; %outline the bytes for i=1 upto 3: zx:=(5u,i*u);zy:=(6u,i*u); if i = 3: draw zx{dir 45} .. .5[zx,zy] {dir -45} .. zy; else: draw zx--zy; fi endfor % draw arrows drawarrow .5[(5u,0u),(6u,1u)]{left}.. .5[(1u,0),(1u,1u)]; label.lft("top",(-1u,5.5u)); drawarrow (-1u,5.5u)..(0,5.5u); label.bot(btex $stbl[].table\_entry$ etex,(6u,0u)); label.top(btex $key\uparrow$ etex,.5[.5[(5u,0u),(6u,1u)],.5[(1u,0),(1u,1u)]]); % label subscripts defaultscale:=.6; for i=0 upto 3: zy:=(6u,i*u); string a; if i=3: a := "prime-1"; label.rt(a,zy); else: a:=decimal (i); label.rt(substring(0,1)of a,zy); fi endfor defaultscale:=1; %outline table_entry label.rt(btex table$\_$entry: etex,(9u,6u)); label.rt(btex $\bullet\ $key$\uparrow$ \ \ $\bullet\ $key\ len\ \ $\bullet\ $stbl\ pos etex,(10u,5u)); label.rt(btex $\bullet\ $vacant --- boolean valued etex,(10u,4u)); label.rt(btex $\bullet\ $defined\ \ $\bullet\ $used --- both boolean valued etex,(10u,3u)); label.rt(btex $\bullet\ $type\ $\in\ $\ rule, terminal, keyword, thread, unknown etex,(10u,2u)); label.rt(btex $\bullet\ $symbol\ $\uparrow\ \in\ $rule$\_$in$\_$stbl, T$\_$in$\_$stbl, kw$\_$in$\_$stbl, th$\_$in$\_$stbl, tth$\_$in$\_$stbl etex,(10u,1u)); endfig; beginfig(2); % outline rule-in-stbl label.rt(btex rule$\_$in$\_$stbl: etex,(1u,10u)); label.rt(btex $\bullet\ $stbl index etex,(2u,9u)); label.rt(btex $\bullet\ $rule$\_$def\ $\uparrow$ etex,(2u,8u)); label.rt(btex $\bullet\ $auto delete\ $\bullet\ $ auto abort etex,(3u,7u)); label.rt(btex $\bullet\ $contains an epsilon subrule etex,(3u,6u)); label.rt(btex $\bullet\ $rule name etex,(3u,5u)); label.rt(btex $\bullet\ $parallel$\_$monitor$\_$phrase$\uparrow$ etex,(3u,4u)); label.rt(btex $\bullet\ $subrules$\_$phrase$\uparrow$ etex,(3u,3u)); label.rt(btex $\bullet\ $rule$\_$lhs$\_$phrase$\uparrow$ etex,(3u,2u)); label.rt(btex $\bullet\ $lhs directives map\ --- $<$string, CAbs$\_$lr1$\_$sym$\uparrow > $ etex,(3u,1u)); label.rt(btex $\bullet\ $list of refered$\_$rule $\uparrow$ etex,(2u,0u)); label.rt(btex $\bullet\ $referenced rule \ --- rule$\_$in$\_$stbl$\uparrow$ etex,(3u,-1u)); % outline T-in-stbl label.rt(btex T$\_$in$\_$stbl: etex,(19u,10u)); label.rt(btex $\bullet\ $stbl index etex,(20u,9u)); label.rt(btex $\bullet\ $terminal$\_$def\ $\uparrow$ etex,(20u,8u)); label.rt(btex $\bullet\ $auto delete\ $\bullet\ $ auto abort etex,(21u,7u)); label.rt(btex $\bullet\ $terminal name etex,(21u,6u)); label.rt(btex $\bullet\ $class name etex,(21u,5u)); label.rt(btex $\bullet\ $directives map\ --- $<$string, CAbs$\_$lr1$\_$sym$\uparrow > $ etex,(21u,4u)); label.rt(btex $\bullet\ $list of refered$\_$T $\uparrow$ etex,(20u,3u)); label.rt(btex $\bullet\ $referenced terminal \ --- T$\_$in$\_$stbl$\uparrow$ etex,(21u,2u)); % outline th-in-stbl label.rt(btex th$\_$in$\_$stbl: Linker only etex,(1u,-3u)); label.rt(btex $\bullet\ $stbl index etex,(2u,-4u)); label.rt(btex $\bullet\ $thread$\_$attributes\ $\uparrow$ etex,(2u,-5u)); label.rt(btex $\bullet\ $transitive\ $\bullet\ $ monolithic etex,(3u,-6u)); label.rt(btex $\bullet\ $grammar name etex,(3u,-7u)); label.rt(btex $\bullet\ $namespace name etex,(3u,-8u)); label.rt(btex $\bullet\ $thread name etex,(3u,-9u)); label.rt(btex $\bullet\ $file name etex,(3u,-10u)); label.rt(btex $\bullet\ $enumeration value etex,(3u,-11u)); % outline tth-in-stbl - linker's terminals label.rt(btex tth$\_$in$\_$stbl: Linker only etex,(19u,-3u)); label.rt(btex $\bullet\ $stbl index etex,(20u,-4u)); label.rt(btex $\bullet\ $T$\_$attributes\ $\uparrow$ etex,(20u,-5u)); label.rt(btex $\bullet\ $fully qualified name etex,(21u,-6u)); label.rt(btex $\bullet\ $enumeration value etex,(21u,-7u)); % outline kw-in-stbl label.rt(btex kw$\_$in$\_$stbl: etex,(19u,-9u)); label.rt(btex $\bullet\ $stbl index etex,(20u,-10u)); label.rt(btex $\bullet\ $CAbs$\_$lr1$\_$sym\ $\uparrow$ etex,(20u,-11u)); endfig; end;