Som parse tree (som v1.5)



list  


 .--.-- . . . .--/
 |  |  

A list is linked dot-pairs.  A dot-pair has two fields: head.tail.  The head can be either a dot-pair or an atom.  The tail is a pointer points to list or nil (end of list).  An atom has two fields: type.value.   An atom is distinguishable from a dot-pair because its type field has a small value (0..9), this value is less than any pointer to dot-pair. 

Example of a list of A, B, C       (A B C)

atom ::

oper.op    gname.idx   lname.idx   string.str   num.value

op ::  

        add sub mul div eq ne lt le gt ge not band bor bxor mod shl shr
        set vec mac fun call mx if ifelse while for break array case sys

program ::

fun/mac definition     (oper.fun/mac gname.idx e...)
for                          (oper.for lv ex0 ex0 ex)
while                       (oper.while ex0 ex)
if                             (oper.if ex0 ex)
ifelse                       (oper.ifelse ex0 ex ex)
case                        (oper.case ex0 block)
assign                      (oper.set var ex)
call/mx                     (oper.call/mx gname.idx e...)
block                       (oper.block e...)
syscall                      (oper.sys num.value e...)

var ::

        gname.idx  lname.idx (oper.vec var ex)

Example

to sort | i j =
  for i 0 maxdata-1
    for j 0 maxdata-2
      if data[j+1] < data[j]
        swap j j+1

(fun sort
  (for #1 0 (- 20 1 )
    (for #2 0 (- 20 2 )
      (if (< (vec data (+ #2 1 ))(vec data #2 ))
        (call swap #2 (+ #2 1 )))))))

: print x = syscall {1 x}

(mac print (sys 1 #1 ))

encoding

encoding of type (0..9)

      sp 0   oper 1   num 2   gname 3   lname 4  * 5  string 6

encoding of op

 mul 50    div 51    sub 52     add 53    set 54
 eq 55     band 56   bor 57     bxor 58   mod 59
 not 60    ne 61     lt 62      le 63     shl 64
 gt 65     ge 66     shr 67     mac 68    * 69
 * 70      vec 71    mx 72      block 73  call 74
 fun 75    if 76     ifelse 77  while 78  for 79
 break 80  array 81  case 82    * 83      sys 84

24 Feb 2005