% 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;
