home *** CD-ROM | disk | FTP | other *** search
- / builtins for shift-reduce parsking
- f = r5
- i = r3
- g = r4
- .globl succ,pbundle,goto,iget
- .globl g1
- .globl stack,unstack,gotab,accept
-
- /stack label of present rule (state)
- /should come first in a rule
-
- stack:
- mov i,(g)
- sub $2,(g)+
- jmp succ
-
- /unstack(n) deletes last n stacked states
- /states are distinguishable from translations in not having
- /an exit bit ($1) nor being bundles ($100000)
- unstack:
- jsr pc,iget
- mov (r0),r0
- mov g,r1
- 1:
- bit -(r1),$100001
- bne 1b
- dec r0
- bge 1b
- tst (r1)+
- br 1f
-
- accept: /clean out all states from stack
- mov f,r1
- add $g1,r1
- 1:
- mov r1,r0
- mov r1,-(sp)
- 1:
- cmp r1,g
- bge 2f
- bit (r1)+,$100001
- beq 1b
- mov -2(r1),(r0)+
- br 1b
- 2:
- mov r0,g
- mov (sp)+,r0
- jsr pc,pbundle
- tst r0
- beq 1f
- mov r0,(g)+
- 1:
- jmp succ
-
- /gotab(s1,t1,s2,t2,...sn,tn,0,t)
- /checks top of stack for states
- /s1,s2,... and goes to t1, t2 accordingly
- /if top of stack is not in table, goes to t
-
- gotab:
- mov g,r0
- 1:
- bit -(r0),$100001 /find top state
- bne 1b
- mov (r0),-(sp)
- 1:
- jsr pc,iget
- tst (r0)
- beq 1f
- cmp (sp),r0
- beq 1f
- jsr pc,iget
- br 1b
- 1:
- tst (sp)+
- jmp goto
-