home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol166 / asmbl.cnv < prev    next >
Encoding:
Text File  |  1984-04-29  |  3.2 KB  |  129 lines

  1.  
  2. [ASMBL.CNV]
  3. [CNVRT assembler of intermediate code for "C"]
  4. [Harold V. McIntosh, 20 June 1983]
  5.  
  6.  
  7.  
  8. [generic assignment]
  9. (()()(0 1)(
  10.     (+=@&<:1:><-->@[2]in,(%C,/pob/poa/*a#<1>/+[b]a/pu[b])[2]in);
  11.     (+=@&<:1:><-->@&[2]in,(%C,poa/pob/lb[b]/xab/*a#<1>/+[b]a/pu[b])[2]in);
  12.     (-=@&<:1:><-->@[2]in,(%C,/pob/poa/*a#<1>/-[b]a/pu[b])[2]in);
  13.     (-=@&<:1:><-->@&[2]in,(%C,poa/pob/lb[b]/xab/*a#<1>/-[b]a/pu[b])[2]in);
  14.     (<0>@&<:2:>in@<:2:>in,(%C,/pob/poa(b,<0>)/pua)[2]in);
  15.     (<0>@&<:2:>in@&<:2:>in,(%C,/poa/pob/lb[b]/xab(b,<0>)/pua)[2]in);
  16.     (,can<'>t store);
  17.   )) a
  18.  
  19. [code for assignment options]
  20. (()()()(
  21.     (=,/sa[b]);
  22.     (+=,/+a[b]/sa[b]);
  23.     (-=,/-a[b]/sa[b]);
  24.   )) b
  25.  
  26. [generic binary]
  27. (()()(0 1)(
  28.     (-@<:1:><-->@<:1:>,[2]in(%C,/poa/pob/div#<1>/pua));
  29.     (<0>@[2]in@[2]in,[2]in(%C,/poa/pob(d,<0>))/pua);
  30.     (<0>@&[2]in@[2]in,[2]in(%C,/pob/la[b]/pob(d,<0>)/pua));
  31.     (<0>@[2]in@&[2]in,[2]in(%C,/poa/pob/lb[b](d,<0>)/pua));
  32.     (<0>@&[2]in@&[2]in,[2]in(%C,/pob/la[b]/pob/lb[b](d,<0>)/pua));
  33.   )) c
  34.  
  35. [code for binary options]
  36. (()()()(
  37.     (+,/+ab);
  38.     (-,/-ab);
  39.     (*,/*ab);
  40.   )) d
  41.  
  42. [generic unary]
  43. ((
  44.     ((and,(or,+,-,!),<0>)) A
  45.     ((and,(or,pri,prd,poi,pod),<0>)) B
  46.   )()(0 1)(
  47.     (&@&<0>,<0>);
  48.     (&,(%C,excess &));
  49.     (*@&*<0>,&<0>(%C,/pob/pu[b]));
  50.     (<:A:>@&[2]in,[2]in(%C,/pob/pu[b])(%C,(f,<0>)));
  51.     (<:B:>@&[2]in,[2]in(%C,(f,<0>)));
  52.     (<:A:>@[2]in,[2]in(%C,(f,<0>)));
  53.     (<:B:>@&*[<1>],[2]in(%C,(g,<0>@<1>)));
  54.     (<:B:>@&[<-->*<1>],[2]in(%C,(g,<0>@<1>)));
  55.     (<0>@[2]in,[2]in(%C,(f,<0>)));
  56.   )) e
  57.  
  58. [code for unary options]
  59. (()()()(
  60.     (pri,/pob/i[b]/pu[b]);
  61.     (prd,/pob/d[b]/pu[b]);
  62.     (poi,/pob/pu[b]/i[b]);
  63.     (pod,/pob/pu[b]/d[b]);
  64.     (!,/poa/-a#1/sbb ax,ax/pua);
  65.     (-,/poa/neg ax/pua);
  66.     (~,/poa/not ax/pua);
  67.   )) f
  68.  
  69. [auto increment and decrement]
  70. (()()(0 1)(
  71.     (pri@<0>,/pob/la[b]/+a#<0>/sa[b]/pua);
  72.     (prd@<0>,/pob/la[b]/-a#<0>/sa[b]/pua);
  73.     (poi@<0>,/pob/la[b]/pua/+a#<0>/sa[b]);
  74.     (pod@<0>,/pob/la[b]/pua/-a#<0>/sa[b]);
  75.   )) g
  76.  
  77. [assemble fetches]
  78. (()()(0 1)(
  79.         ( <0><,><--> <0><1><,>,&<1>(%C,/la#<0>/pua));
  80.         ( <0><,>,&[2]int(%C,/la#<0>/pua));
  81.   )) h
  82.  
  83. [assemble index]
  84. (()()(0 1)(
  85.     (&[2]in@&[<-->*<0>]<1>,&[<0>]<1><<
  86.         >>(%C,/pob/la[b]/pob/*a#<0>/+ba/pub));
  87.     ([2]in@&[<-->*<0>]<1>,&[<0>]<1><<
  88.         >>(%C,/poa/pob/*a#<0>/+ba/pub));
  89.     (,not indexable);
  90.   )) i
  91.  
  92. [assemble function]
  93. (()()(0 1)(
  94.     (&<(><)><0>@,<0>(%C,/pob/call [bx]));
  95.   )) j
  96.  
  97. [option menu]
  98. ((
  99.   [pointer weights]    ((or,*(and,*,<1>),*[<1>],[<-->*<1>])) 1
  100.   [pointer compatible]  ((or,*<-->],[2],<-->*2])) 2
  101.   )()(0 1 2 3)(
  102.     (;,);
  103.     (:<0>,(%C,<0>)(%R)<0>):
  104.     (/fetch<0>:prog:<1>:dict:<2>,<<
  105.         >>::prog:(h,<0><,><2>)@<1>:dict:<2>):
  106.     (/define<0>:prog:<1>:dict:<2>,<<
  107.         >>::prog:<1>:dict:<0><2>):
  108.     (/assign <0>:prog:<1>@<2>@<3>,<<
  109.         >>::prog:(a,<0>@<1>@<2>)@<3>):
  110.     (/binary <0>:prog:<1>@<2>@<3>,<<
  111.         >>::prog:(c,<0>@<1>@<2>)@<3>):
  112.     (/unary <0>:prog:<1>@<2>,::prog:(e,<0>@<1>)@<2>):
  113.     (/index:prog:<0>@<1>@<2>,::prog:(i,<0>@<1>)@<2>):
  114.     (/function:prog:<0>@<1>@<2>,::prog:(j,<0>@<1>)@<2>):
  115.     (/char<0>,/define a[1]ch<,> b[1]ch<,> c[3*1]ch<,> d*[1]ch<,><0>):
  116.     (/int<0>,/define i[2]in<,> j*[2]in<,> k[8*2]in<,><<
  117.         >> o**[8*3*2]in<,> l<(><)>[2]in<,><0>):
  118.     (/float<0>,/define p[4]fl<,> q***[4]fl<,> r<(><)>[4]fl<,><0>):
  119.     (/clear,::prog:@(%|):dict:):
  120.     (<-->:prog:<0>,(%C,nope)::prog:<0>):
  121.   )) w
  122.  
  123. [main program]
  124. (()()()(  
  125.     (,(w,(%R):prog:@(%|):dict:));
  126.   ))
  127.  
  128. [end]
  129.