parsing progress
This commit is contained in:
parent
ba4b9c02e3
commit
e382e2fb1a
148
hoax.tal
148
hoax.tal
|
@ -112,29 +112,30 @@
|
||||||
( 04 comment )
|
( 04 comment )
|
||||||
@state $1
|
@state $1
|
||||||
@stack $2
|
@stack $2
|
||||||
@buffer [ &pos $1 &input $40 ] ( max symbol size 64 )
|
@buffer [ &pos $2 &input $40 ] ( max symbol size 64 )
|
||||||
|
|
||||||
|0100
|
|0100
|
||||||
;init-hoax JSR2
|
;init-hoax JSR2
|
||||||
#00 .state STZ
|
#00 .state STZ
|
||||||
;on-key #10 DEO2
|
;buf-reset JSR2
|
||||||
;reset-input JSR2
|
;on-key-ready #10 DEO2
|
||||||
|
( ;reset-input JSR2 )
|
||||||
;demo JSR2
|
;demo JSR2
|
||||||
( DEBUG EXIT )
|
( DEBUG EXIT )
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
@reset-input ( -> )
|
( @reset-input ( -> )
|
||||||
#0000 #0000 ;cons JSR2 ( pair$ )
|
#0000 #0000 ;cons JSR2 ( pair$ )
|
||||||
.stack STZ2 ( ; stack<-pair )
|
.stack STZ2 ( ; stack<-pair )
|
||||||
JMP2r
|
JMP2r )
|
||||||
|
|
||||||
@complete-with ( v$ -> )
|
( @complete-with ( v$ -> )
|
||||||
.stack LDZ2 ( v$ stack$ )
|
.stack LDZ2 ( v$ stack$ )
|
||||||
STH2k SWP2 ;car! JSR2 ( [stack] ; car(stack)<-v )
|
STH2k SWP2 ;car! JSR2 ( [stack] ; car(stack)<-v )
|
||||||
#0000 STH2r ;cons JSR2 ( cell$ )
|
#0000 STH2r ;cons JSR2 ( cell$ )
|
||||||
.stack STZ2 ( stack<- )
|
.stack STZ2 ( stack<- ) )
|
||||||
|
|
||||||
@start-list ( -> )
|
( @start-list ( -> )
|
||||||
#0000 .stack LDZ2 ( 0000 stack$ )
|
#0000 .stack LDZ2 ( 0000 stack$ )
|
||||||
;cons JSR2 ( pair$ )
|
;cons JSR2 ( pair$ )
|
||||||
DUP2 .stack STZ2 ( pair$ ; stack<-pair )
|
DUP2 .stack STZ2 ( pair$ ; stack<-pair )
|
||||||
|
@ -146,39 +147,118 @@
|
||||||
POP2 STH2r ( cell$ [a^] )
|
POP2 STH2r ( cell$ [a^] )
|
||||||
INCr INCr STHkr ( cell$ a+2^ [a+2^] )
|
INCr INCr STHkr ( cell$ a+2^ [a+2^] )
|
||||||
STZ2 STHr .stack/pos STZ ( ; pos<-a+2 )
|
STZ2 STHr .stack/pos STZ ( ; pos<-a+2 )
|
||||||
|
JMP2r )
|
||||||
|
|
||||||
|
( @end-list ( -> )
|
||||||
|
;stack/pos LDA2k LDA2 ( pos* elem$ )
|
||||||
|
STH2 #0004 SUB2 ( pos-4* [elem$] ) )
|
||||||
|
|
||||||
|
|
||||||
|
@buf-end ( -> )
|
||||||
|
#00 ;buffer/pos LDA2 STA ( ; addr<-00 )
|
||||||
|
@buf-reset
|
||||||
|
;buffer/input ;buffer/pos STA2 ( ; pos<-start )
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
@end-list ( -> )
|
@buf-add ( c -> )
|
||||||
;stack/pos LDA2k LDA2 ( pos* elem$ )
|
;buffer/pos LDA2 STAk ( c^ addr* )
|
||||||
STH2 #0004 SUB2 ( pos-4* [elem$] )
|
INC2 ;buffer/pos STA2 ( c^ ; pos<-addr+1 )
|
||||||
|
POP JMP2r ( )
|
||||||
|
|
||||||
|
@start-list ( c -> )
|
||||||
|
;echo JSR2 "start 20 "list 0a 00 POP BRK
|
||||||
|
|
||||||
@on-key-start ( -> )
|
@end-list ( c -> )
|
||||||
|
;echo JSR2 "end 20 "list 0a 00 POP BRK
|
||||||
|
|
||||||
|
@start-string ( c -> )
|
||||||
|
;on-key-string #10 DEO2
|
||||||
|
;echo JSR2 "start 20 "string 0a 00 POP BRK
|
||||||
|
|
||||||
|
@append-string ( c -> )
|
||||||
|
;echo JSR2 "append 20 "string 20 00
|
||||||
|
DUP #18 DEO NL
|
||||||
|
;buf-add JSR2 BRK
|
||||||
|
|
||||||
|
@end-string ( c -> )
|
||||||
|
;on-key-ready #10 DEO2
|
||||||
|
;echo JSR2 "end 20 "string 0a 00 POP
|
||||||
|
;buf-end JSR2
|
||||||
|
;buffer/input ;print JSR2 NL
|
||||||
|
BRK
|
||||||
|
|
||||||
|
@start-word ( c -> )
|
||||||
|
;on-key-word #10 DEO2
|
||||||
|
;echo JSR2 "start 20 "word 20 00
|
||||||
|
DUP #18 DEO NL
|
||||||
|
;buf-add JSR2 BRK
|
||||||
|
|
||||||
|
@append-word ( c -> )
|
||||||
|
;echo JSR2 "append 20 "word 20 00
|
||||||
|
DUP #18 DEO NL
|
||||||
|
;buf-add JSR2 BRK
|
||||||
|
|
||||||
|
@end-word0 ( c -> )
|
||||||
|
;on-key-ready #10 DEO2
|
||||||
|
;echo JSR2 "end 20 "word 0a 00 POP
|
||||||
|
;buf-end JSR2
|
||||||
|
;buffer/input ;print JSR2 NL
|
||||||
|
JMP2r
|
||||||
|
|
||||||
|
@start-escape ( c -> )
|
||||||
|
;on-key-escaped #10 DEO2
|
||||||
|
;echo JSR2 "start 20 "escape 0a 00 POP BRK
|
||||||
|
|
||||||
|
( TODO: more sophisticated escapes )
|
||||||
|
@on-key-escaped ( -> )
|
||||||
|
;on-key-string #10 DEO2
|
||||||
|
#12 DEI ;append-string JMP2
|
||||||
|
|
||||||
|
( string state means we're inside a string literal )
|
||||||
|
( waiting to see an unecaped closing double quote )
|
||||||
|
@on-key-string ( -> )
|
||||||
#12 DEI
|
#12 DEI
|
||||||
DUP #09 EQU ,&skip JCN ( tab )
|
DUP #5c EQU ;start-escape JCN2 ( backslash )
|
||||||
DUP #0a EQU ,&skip JCN ( nl )
|
DUP #22 EQU ;end-string JCN2 ( dquote )
|
||||||
DUP #0d EQU ,&skip JCN ( cr )
|
;append-string JMP2
|
||||||
DUP #20 EQU ,&skip JCN ( sp )
|
|
||||||
DUP #20 LTH ,&control JCN ( control chars )
|
|
||||||
DUP #7e GTH ,&control JCN ( delete + 8bit )
|
|
||||||
DUP #28 EQU ,start-list JCN ( lpar )
|
|
||||||
DUP #29 EQU ,&rpar JCN ( rpar )
|
|
||||||
,&printable JMP
|
|
||||||
|
|
||||||
&rpar
|
( word state means we're in a word until whitespace )
|
||||||
|
@on-key-word ( -> )
|
||||||
|
#12 DEI
|
||||||
|
DUP #29 EQU ,&end JCN ( rpar )
|
||||||
|
DUP #09 EQU ,&space JCN ( tab )
|
||||||
|
DUP #0a EQU ,&space JCN ( nl )
|
||||||
|
DUP #0d EQU ,&space JCN ( cr )
|
||||||
|
DUP #20 EQU ,&space JCN ( sp )
|
||||||
|
DUP #20 LTH ,&skip JCN ( control chars )
|
||||||
|
DUP #7e GTH ,&skip JCN ( delete + 8bit )
|
||||||
|
;append-word JMP2
|
||||||
|
&skip
|
||||||
|
;echo JSR2 "skipped 0a 00 POP BRK
|
||||||
|
&space
|
||||||
|
;end-word0 JSR2
|
||||||
|
;echo JSR2 "whitespace 0a 00 BRK
|
||||||
|
&end
|
||||||
|
;end-word0 JSR2
|
||||||
|
#00 ;end-list JMP2
|
||||||
|
|
||||||
|
( ready state means we are expecing a complete value )
|
||||||
&skip POP BRK
|
@on-key-ready ( -> )
|
||||||
&control POP BRK ( todo )
|
#12 DEI
|
||||||
&printable
|
DUP #28 EQU ;start-list JCN2 ( lpar )
|
||||||
|
DUP #29 EQU ;end-list JCN2 ( rpar )
|
||||||
@on-key ( -> )
|
DUP #22 EQU ;start-string JCN2 ( dquote )
|
||||||
.state LDZ #00 EQU ,on-key-start JCN
|
DUP #09 EQU ,&space JCN ( tab )
|
||||||
.state LDZ #01 EQU ,on-key-symbol JCN
|
DUP #0a EQU ,&space JCN ( nl )
|
||||||
.state LDZ #02 EQU ,on-key-string JCN
|
DUP #0d EQU ,&space JCN ( cr )
|
||||||
.state LDZ #03 EQU ,on-key-escape JCN
|
DUP #20 EQU ,&space JCN ( sp )
|
||||||
.state LDZ #04 EQU ,on-key-comment JCN
|
DUP #20 LTH ,&skip JCN ( control chars )
|
||||||
#0000 DIV
|
DUP #7e GTH ,&skip JCN ( delete + 8bit )
|
||||||
|
;start-word JMP2
|
||||||
|
&space
|
||||||
|
;echo JSR2 "whitespace 0a 00 POP BRK
|
||||||
|
&skip
|
||||||
|
;echo JSR2 "skipped 0a 00 POP BRK
|
||||||
|
|
||||||
( #12 DEI #0a EQU ,&newline JCN
|
( #12 DEI #0a EQU ,&newline JCN
|
||||||
#12 DEI ;buffer/pos LDA2 STAk ( c pos ; addr<-c )
|
#12 DEI ;buffer/pos LDA2 STAk ( c pos ; addr<-c )
|
||||||
|
|
Loading…
Reference in New Issue