Add original unix v6
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
/ 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
|
||||
Reference in New Issue
Block a user