cleaned up
This commit is contained in:
parent
72509dc43b
commit
5f7c93f959
91
regex.tal
91
regex.tal
|
@ -35,10 +35,13 @@
|
||||||
%newline { #0a emit }
|
%newline { #0a emit }
|
||||||
%print { debug newline }
|
%print { debug newline }
|
||||||
|
|
||||||
|
( test -> )
|
||||||
|
|
||||||
|0100
|
|0100
|
||||||
;expr1 ;compile JSR2 print newline
|
;expr1 ;compile JSR2
|
||||||
;emit-stack JSR2 newline
|
print
|
||||||
;emit-arena JSR2 newline
|
;emit-stack JSR2
|
||||||
|
;emit-arena JSR2
|
||||||
newline
|
newline
|
||||||
|
|
||||||
;test1 OVR2k ;match JSR2 ;emit-byte JSR2 newline
|
;test1 OVR2k ;match JSR2 ;emit-byte JSR2 newline
|
||||||
|
@ -220,8 +223,8 @@
|
||||||
( LIT '@ emit DUP ;emit-byte JSR2 newline )
|
( LIT '@ emit DUP ;emit-byte JSR2 newline )
|
||||||
;alloc-lit JSR2
|
;alloc-lit JSR2
|
||||||
( LIT '# emit print )
|
( LIT '# emit print )
|
||||||
;emit-stack JSR2
|
( ;emit-stack JSR2
|
||||||
;emit-arena JSR2
|
;emit-arena JSR2 )
|
||||||
DUP2 ;push-next JSR2 ( print )
|
DUP2 ;push-next JSR2 ( print )
|
||||||
( LIT '& emit print )
|
( LIT '& emit print )
|
||||||
;compile-region-loop JMP2
|
;compile-region-loop JMP2
|
||||||
|
@ -234,22 +237,22 @@
|
||||||
|
|
||||||
@c-star ( c^ -> regex* )
|
@c-star ( c^ -> regex* )
|
||||||
( LIT '* emit print )
|
( LIT '* emit print )
|
||||||
POP print
|
POP ( print )
|
||||||
;pop4 JSR2 SWP2 STH2 STH2k ( x1 [x0 x1] )
|
;pop4 JSR2 SWP2 STH2 STH2k ( x1 [x0 x1] )
|
||||||
( LIT '! emit space print )
|
( LIT '! emit space print )
|
||||||
;alloc-star JSR2 ( r )
|
;alloc-star JSR2 ( r )
|
||||||
STH2r STH2kr ( r x1 x0 [x0] )
|
STH2r STH2kr ( r x1 x0 [x0] )
|
||||||
( LIT '0 emit newline )
|
( LIT '0 emit newline )
|
||||||
;emit-arena JSR2
|
( ;emit-arena JSR2 )
|
||||||
;remove-from JSR2 ( r [x0] )
|
;remove-from JSR2 ( r [x0] )
|
||||||
LIT '1 emit newline
|
( LIT '1 emit newline
|
||||||
;emit-arena JSR2
|
;emit-arena JSR2 )
|
||||||
STH2r OVR2 OVR2 ( r x0 r x0 ) ;set-next JSR2
|
STH2r OVR2 OVR2 ( r x0 r x0 ) ;set-next JSR2
|
||||||
OVR2 #0003 ADD2 #0000 SWP2 STA2 ( fixme )
|
OVR2 #0003 ADD2 #0000 SWP2 STA2 ( fixme )
|
||||||
LIT '2 emit print
|
( LIT '2 emit print
|
||||||
;emit-arena JSR2
|
;emit-arena JSR2 )
|
||||||
( r x0 ) SWP2 ;push4 JSR2
|
( r x0 ) SWP2 ;push4 JSR2
|
||||||
LIT '* emit print
|
( LIT '* emit print )
|
||||||
;compile-region-loop JMP2
|
;compile-region-loop JMP2
|
||||||
|
|
||||||
|
|
||||||
|
@ -289,15 +292,15 @@
|
||||||
|
|
||||||
@alloc-star ( expr* -> r* )
|
@alloc-star ( expr* -> r* )
|
||||||
( LIT '& emit space print )
|
( LIT '& emit space print )
|
||||||
LIT 'a emit print
|
( LIT 'a emit print )
|
||||||
#05 ;alloc JSR2 STH2 print ( expr [r] )
|
#05 ;alloc JSR2 STH2 ( print ) ( expr [r] )
|
||||||
#05 STH2kr STA print ( expr [r] )
|
#05 STH2kr STA ( print ) ( expr [r] )
|
||||||
DUP2 STH2kr INC2 STA2 print ( expr [r] )
|
DUP2 STH2kr INC2 STA2 ( print ) ( expr [r] )
|
||||||
#0000 STH2kr #0003 ADD2 STA2 print ( expr [r] )
|
#0000 STH2kr #0003 ADD2 STA2 ( print ) ( expr [r] )
|
||||||
LIT 'a emit ;emit-arena JSR2 ;emit-stack JSR2
|
( LIT 'a emit ;emit-arena JSR2 ;emit-stack JSR2 )
|
||||||
|
|
||||||
STH2kr SWP2 print ( r expr [r] )
|
STH2kr SWP2 ( print ) ( r expr [r] )
|
||||||
LIT 'x emit print
|
( LIT 'x emit print )
|
||||||
;set-next JSR2 ( [r] )
|
;set-next JSR2 ( [r] )
|
||||||
STH2r JMP2r
|
STH2r JMP2r
|
||||||
|
|
||||||
|
@ -313,7 +316,7 @@
|
||||||
;pop4 JSR2 STH2 ( r ) ( print )
|
;pop4 JSR2 STH2 ( r ) ( print )
|
||||||
#00 STH
|
#00 STH
|
||||||
DUP2 #0000 NEQ2 ,&loop JCN ;alloc-empty JSR2 ( print )
|
DUP2 #0000 NEQ2 ,&loop JCN ;alloc-empty JSR2 ( print )
|
||||||
&loop ( r* ) LIT 'L emit print
|
&loop ( r* ) ( LIT 'L emit print )
|
||||||
;pop4 JSR2 POP2 ( r x ) ( print )
|
;pop4 JSR2 POP2 ( r x ) ( print )
|
||||||
DUP2 #ffff EQU2 ( print ) ( r x x-is-end? ) ,&done JCN
|
DUP2 #ffff EQU2 ( print ) ( r x x-is-end? ) ,&done JCN
|
||||||
INCr
|
INCr
|
||||||
|
@ -326,10 +329,10 @@
|
||||||
STH2r JMP2r
|
STH2r JMP2r
|
||||||
&is-or
|
&is-or
|
||||||
POP2r
|
POP2r
|
||||||
LIT 'b emit print
|
( LIT 'b emit print )
|
||||||
;alloc-empty JSR2 OVR2 OVR2 SWP2 ( r empty empty r )
|
;alloc-empty JSR2 OVR2 OVR2 SWP2 ( r empty empty r )
|
||||||
LIT 'c emit print
|
( LIT 'c emit print )
|
||||||
;set-next JSR2 LIT 'd emit print
|
;set-next JSR2 ( LIT 'd emit print )
|
||||||
( STH2 ;pop4 JSR2 POP2 STH2r ;push4 JSR2 )
|
( STH2 ;pop4 JSR2 POP2 STH2r ;push4 JSR2 )
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
|
@ -341,22 +344,12 @@
|
||||||
;pop4 JSR2 ( r0 r1 x0 x1 )
|
;pop4 JSR2 ( r0 r1 x0 x1 )
|
||||||
DUP2 #0000 EQU2 ( r0 r1 x0 x1 x1=0? ) ,&is-zero JCN
|
DUP2 #0000 EQU2 ( r0 r1 x0 x1 x1=0? ) ,&is-zero JCN
|
||||||
STH2 ROT2 STH2r ( r1 x0 r0 x1 )
|
STH2 ROT2 STH2r ( r1 x0 r0 x1 )
|
||||||
LIT 'p emit print
|
( LIT 'p emit print )
|
||||||
;set-next JSR2 SWP2 ( x0 r1 )
|
;set-next JSR2 SWP2 ( x0 r1 )
|
||||||
LIT 'q emit print
|
( LIT 'q emit print )
|
||||||
;push4 JSR2
|
;push4 JSR2
|
||||||
JMP2r
|
JMP2r
|
||||||
&is-zero POP2 POP2 ;push4 JSR2 JMP2r
|
&is-zero POP2 POP2 ;push4 JSR2 JMP2r
|
||||||
( ( r -> )
|
|
||||||
( LIT 'N emit space print 0 )
|
|
||||||
STH2k ( r [r] ) ( print )
|
|
||||||
;pop4 JSR2 ( r x0 x1 [r] ) ( print )
|
|
||||||
DUP2 #0000 EQU2 ( r x0 x1 x1=0? [r] ) ( print ) ,&is-zero JCN
|
|
||||||
ROT2 SWP2 ( x0 r x1 [r] ) ( print )
|
|
||||||
;set-next JSR2 ( x0 [r] ) STH2r ( x0 r ) ( print )
|
|
||||||
;push4 JSR2 ( )
|
|
||||||
JMP2r
|
|
||||||
&is-zero POP2 POP2 STH2r ;push4 JSR2 ( print LIT '* emit newline ) JMP2r )
|
|
||||||
|
|
||||||
( for nodes (other than 'or') read their 'next' pointer )
|
( for nodes (other than 'or') read their 'next' pointer )
|
||||||
@get-next ( r* -> r.next* )
|
@get-next ( r* -> r.next* )
|
||||||
|
@ -365,36 +358,36 @@
|
||||||
&!2 LDAk #03 NEQ ,&!3 JCN #0002 ADD2 LDA2 JMP2r
|
&!2 LDAk #03 NEQ ,&!3 JCN #0002 ADD2 LDA2 JMP2r
|
||||||
&!3 LDAk #04 NEQ ,&!4 JCN INC2 LDA2 JMP2r
|
&!3 LDAk #04 NEQ ,&!4 JCN INC2 LDA2 JMP2r
|
||||||
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 LDA2 JMP2r
|
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 LDA2 JMP2r
|
||||||
&!5 ( either #04 (or) or ??? ) LIT 'q emit #00 #00 DIV
|
&!5 ( either #04 (or) or ??? ) ( LIT 'q emit ) #00 #00 DIV
|
||||||
|
|
||||||
@set-next-addr ( target* addr* -> )
|
@set-next-addr ( target* addr* -> )
|
||||||
LIT 'Z emit print
|
( LIT 'Z emit print )
|
||||||
LDA2k #0000 EQU2 ( target addr addr=0? ) ,&is-zero JCN
|
LDA2k #0000 EQU2 ( target addr addr=0? ) ,&is-zero JCN
|
||||||
LIT 'N emit print LDA2 ;set-next JSR2 JMP2r
|
( LIT 'N emit print ) LDA2 ;set-next JSR2 JMP2r
|
||||||
&is-zero ( print ) LIT 'z emit print STA2 JMP2r
|
&is-zero ( print ) ( LIT 'z emit print ) STA2 JMP2r
|
||||||
|
|
||||||
( set regex.next to target )
|
( set regex.next to target )
|
||||||
@set-next ( target* regex* -> )
|
@set-next ( target* regex* -> )
|
||||||
LIT 'n emit space LDAk ;emit-byte JSR2 print
|
( LIT 'n emit space LDAk ;emit-byte JSR2 print )
|
||||||
LDAk #01 NEQ ,&!1 JCN INC2 ( STA2 ) LIT 't emit print ;set-next-addr JSR2 JMP2r
|
LDAk #01 NEQ ,&!1 JCN INC2 ( STA2 ) ( LIT 't emit print ) ;set-next-addr JSR2 JMP2r
|
||||||
&!1 LDAk #02 NEQ ,&!2 JCN INC2 ( STA2 ) ;set-next-addr JSR2 JMP2r
|
&!1 LDAk #02 NEQ ,&!2 JCN INC2 ( STA2 ) ;set-next-addr JSR2 JMP2r
|
||||||
&!2 LDAk #03 NEQ ,&!3 JCN #0002 ADD2 ( STA2 ) LIT 'y emit print ;set-next-addr JSR2 JMP2r
|
&!2 LDAk #03 NEQ ,&!3 JCN #0002 ADD2 ( STA2 ) ( LIT 'y emit print ) ;set-next-addr JSR2 JMP2r
|
||||||
&!3 LDAk #04 NEQ ,&!4 JCN
|
&!3 LDAk #04 NEQ ,&!4 JCN
|
||||||
LIT 'w emit print
|
( LIT 'w emit print )
|
||||||
( INC2k LDA2 space LIT '{ emit DUP2 ;emit-short JSR2 ;set-next JSR2
|
( INC2k LDA2 space LIT '{ emit DUP2 ;emit-short JSR2 ;set-next JSR2
|
||||||
#0003 ADD2 LDA2 space LIT '} emit DUP2 ;emit-short JSR2 ;set-next JSR2 JMP2r )
|
#0003 ADD2 LDA2 space LIT '} emit DUP2 ;emit-short JSR2 ;set-next JSR2 JMP2r )
|
||||||
OVR2 OVR2 INC2 ( LIT '{ emit space ) ;set-next-addr JSR2
|
OVR2 OVR2 INC2 ( LIT '{ emit space ) ;set-next-addr JSR2
|
||||||
#0003 ADD2 ( LIT '} emit space ) ;set-next-addr JSR2 JMP2r
|
#0003 ADD2 ( LIT '} emit space ) ;set-next-addr JSR2 JMP2r
|
||||||
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 ( STA2 ) ;set-next-addr JSR2 JMP2r
|
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 ( STA2 ) ;set-next-addr JSR2 JMP2r
|
||||||
&!5 LIT '? emit LDAk ;emit-byte JSR2 #00 #00 DIV
|
&!5 ( LIT '? emit LDAk ;emit-byte JSR2 ) #00 #00 DIV
|
||||||
|
|
||||||
@remove-addr ( target* addr* -> )
|
@remove-addr ( target* addr* -> )
|
||||||
LIT 'A emit print
|
( LIT 'A emit print )
|
||||||
LDA2k #0000 EQU2 ( t a v=0? ) ,&is-zero JCN
|
LDA2k #0000 EQU2 ( t a v=0? ) ,&is-zero JCN
|
||||||
OVR2 OVR2 LDA2 EQU2 ( t a t=v? ) ,&is-equal JCN
|
OVR2 OVR2 LDA2 EQU2 ( t a t=v? ) ,&is-equal JCN
|
||||||
LDA2 ( t v ) ;remove-from JSR2 JMP2r
|
LDA2 ( t v ) ;remove-from JSR2 JMP2r
|
||||||
&is-zero LIT 'r emit print POP2 POP2 JMP2r
|
&is-zero ( LIT 'r emit print ) POP2 POP2 JMP2r
|
||||||
&is-equal LIT 's emit print NIP2 #0000 SWP2 STA2 JMP2r
|
&is-equal ( LIT 's emit print ) NIP2 #0000 SWP2 STA2 JMP2r
|
||||||
|
|
||||||
( remove target from regex )
|
( remove target from regex )
|
||||||
@remove-from ( target* regex* -> )
|
@remove-from ( target* regex* -> )
|
||||||
|
@ -408,7 +401,7 @@
|
||||||
( LIT 'q emit print )
|
( LIT 'q emit print )
|
||||||
#0003 ADD2 ;remove-addr JSR2 JMP2r
|
#0003 ADD2 ;remove-addr JSR2 JMP2r
|
||||||
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 ;remove-addr JSR2 JMP2r
|
&!4 LDAk #05 NEQ ,&!5 JCN #0003 ADD2 ;remove-addr JSR2 JMP2r
|
||||||
&!5 LIT '? emit LDAk ;emit-byte JSR2 #00 #00 DIV
|
&!5 ( LIT '? emit LDAk ;emit-byte JSR2 ) #00 #00 DIV
|
||||||
|
|
||||||
( test cases -------- )
|
( test cases -------- )
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue