home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / tmg / tmgb / stack.s < prev    next >
Encoding:
Text File  |  1975-05-13  |  1.1 KB  |  77 lines

  1. / builtins for shift-reduce parsking
  2. f = r5
  3. i = r3
  4. g = r4
  5. .globl succ,pbundle,goto,iget
  6. .globl g1
  7. .globl stack,unstack,gotab,accept
  8.  
  9. /stack label of present rule (state)
  10. /should come first in a rule
  11.  
  12. stack:
  13.     mov    i,(g)
  14.     sub    $2,(g)+
  15.     jmp    succ
  16.  
  17. /unstack(n) deletes last n stacked states
  18. /states are distinguishable from translations in not having
  19. /an exit bit ($1) nor being bundles ($100000)
  20. unstack:
  21.     jsr    pc,iget
  22.     mov    (r0),r0
  23.     mov    g,r1
  24. 1:
  25.     bit    -(r1),$100001
  26.     bne    1b
  27.     dec    r0
  28.     bge    1b
  29.     tst    (r1)+
  30.     br    1f
  31.  
  32. accept:            /clean out all states from stack
  33.     mov    f,r1
  34.     add    $g1,r1
  35. 1:
  36.     mov    r1,r0
  37.     mov    r1,-(sp)
  38. 1:
  39.     cmp    r1,g
  40.     bge    2f
  41.     bit    (r1)+,$100001
  42.     beq    1b
  43.     mov    -2(r1),(r0)+
  44.     br    1b
  45. 2:
  46.     mov    r0,g
  47.     mov    (sp)+,r0
  48.     jsr    pc,pbundle
  49.     tst    r0
  50.     beq    1f
  51.     mov    r0,(g)+
  52. 1:
  53.     jmp    succ
  54.  
  55. /gotab(s1,t1,s2,t2,...sn,tn,0,t)
  56. /checks top of stack for states
  57. /s1,s2,... and goes to t1, t2 accordingly
  58. /if top of stack is not in table, goes to t
  59.  
  60. gotab:
  61.     mov    g,r0
  62. 1:
  63.     bit    -(r0),$100001    /find top state
  64.     bne    1b
  65.     mov    (r0),-(sp)
  66. 1:
  67.     jsr    pc,iget
  68.     tst    (r0)
  69.     beq    1f
  70.     cmp    (sp),r0
  71.     beq    1f
  72.     jsr    pc,iget
  73.     br    1b
  74. 1:
  75.     tst    (sp)+
  76.     jmp    goto
  77.