~rabbits/drifblim

c915d19a4adc0e7872a9964ffcc0617b283ab353 — Devine Lu Linvega 2 months ago fa48e2d
Progress on new tokenizer
1 files changed, 117 insertions(+), 15 deletions(-)

M src/symbols.tal
M src/symbols.tal => src/symbols.tal +117 -15
@@ 8,6 8,7 @@

	@src $30
	@dst $30
	@include $30
	@program &ptr $2

|0100 ( -> )


@@ 57,6 58,8 @@ JMP2r

@handle-token ( t* -- )

	( DUP2 ;pstr JSR2 #2018 DEO .program/ptr LDZ2 ;phex JSR2 #0a18 DEO )

	LDAk LIT "( EQU ,&on-parens JCN
	LDAk LIT ") EQU ,&on-parens JCN
	[ LIT &sleep $1 ] ,&on-sleep JCN


@@ 67,28 70,102 @@ JMP2r
	&on-sleep ( t* -- ) POP2 JMP2r

(
@|symbols )
@|library )

@library
&do-padabs JMP2r
&do-padrel JMP2r
&do-toplab JMP2r
&do-sublab JMP2r
&do-litrel JMP2r
&do-rawrel JMP2r
&do-litzep JMP2r
&do-rawzep JMP2r
&do-litabs JMP2r
&do-rawabs JMP2r
&do-litjmi JMP2r
&do-litjci JMP2r
&do-ignore JMP2r
&do-lithex JMP2r
&do-rawstr JMP2r
&do-inc JMP2r
( non runic )
&do-hex JMP2r
&do-opc JMP2r
&do-jsi JMP2r

(
@|handler )

@get-type ( token* -- type* )

	LDAk ,&rune STR
	( runes )
	;runes/err ;runes
	&l
		LDAk [ LIT &rune $1 ] EQU ,&on-runic JCN
		#0003 ADD2 GTH2k ,&l JCN
	POP2 POP2
	( non-runic )

	POP2 #0000

JMP2r
	&on-runic ( token* -- )
		POP2 POP2 POP2 #000a
	JMP2r

@symbolize ( t* -- )

	LDAk LIT "| NEQ ,&no-padabs JCN
		INC2 ;shex JSR2 .program/ptr STZ2 JMP2r
		&no-padabs
	LDAk LIT "$ NEQ ,&no-padrel JCN
		INC2 ;shex JSR2 .program/ptr STHk LDZ2 ADD2 STHr STZ2 JMP2r
		&no-padrel
	LDAk LIT "" EQU ,&str JCN
	LDAk LIT "@ EQU ,&l0 JCN
	LDAk LIT "& EQU ,&l0 JCN
	DUP2 ;pstr JSR2 #2018 DEO
		;get-type JSR2 ;phex JSR2 #0a18 DEO

JMP2r


@write ( byte -- )

	;phex/b JSR2 #0a18 DEO

	( move )
	.program/ptr LDZ2k INC2 ROT STZ2

JMP2r

@add-toplab ( s* -- )

	;pstr JSR2 #0a18 DEO

JMP2r

@add-sublab ( s* -- )

	;pstr JSR2 #0a18 DEO

JMP2r

@put-str ( s* -- ) &w LDAk ;write JSR2 INC2 LDAk ,&w JCN POP2 JMP2r
@mov-ptr ( v* -- ) .program/ptr LDZ2 ADD2
@set-ptr ( v* -- ) .program/ptr STZ2 JMP2r

@symbolize-old ( t* -- )

	LDAk LIT "~ NEQ ,&no-include JCN INC2k ;include STH2k ;scpy JSR2 ;sclr JSR2 STH2r ;handle-file JMP2 &no-include
	LDAk LIT "| NEQ ,&no-padabs JCN INC2 ;shex JSR2 ,set-ptr JMP &no-padabs
	LDAk LIT "$ NEQ ,&no-padrel JCN INC2 ;shex JSR2 ,mov-ptr JMP &no-padrel
	LDAk LIT "" NEQ ,&no-str JCN INC2 ;put-str JMP2 &no-str
	LDAk LIT "@ NEQ ,&no-toplab JCN INC2 ;add-toplab JMP2 &no-toplab
	LDAk LIT "& NEQ ,&no-sublab JCN INC2 ;add-sublab JMP2 &no-sublab
	LDAk LIT "_ EQU ,&l1 JCN
	LDAk LIT "- EQU ,&l1 JCN
	LDAk LIT "= EQU ,&l2 JCN
	LDAk LIT ", EQU ,&l2 JCN
	LDAk LIT ". EQU ,&l2 JCN
	LDAk LIT "; EQU ,&l3 JCN
	LDAk LIT "? EQU ,&l3 JCN
	LDAk LIT "! EQU ,&l3 JCN
	LDAk LIT "# EQU ,&lithex JCN
	DUP2 ;is-opcode JSR2 ,&l1 JCN
	
	;pstr JSR2 #0a18 DEO 

JMP2r


@@ 96,11 173,14 @@ JMP2r
		;slen JSR2 DUP2 #0003 EQU2 ,&l2 JCN
			DUP2 #0005 EQU2 ,&l3 JCN
			;err/number ;crash JMP2
	&str INC2 ;slen JSR2 .program/ptr LDZ2 ADD2 .program/ptr STZ2 JMP2r
	&str INC2 ;slen JSR2 ,&move JMP
	&l0 POP2 JMP2r
	&l1 POP2 .program/ptr LDZ2k #0001 ADD2 ROT STZ2 JMP2r
	&l2 POP2 .program/ptr LDZ2k #0002 ADD2 ROT STZ2 JMP2r
	&l3 POP2 .program/ptr LDZ2k #0003 ADD2 ROT STZ2 JMP2r
	&l1 POP2 #0001 ,&move JMP
	&l2 POP2 #0002 ,&move JMP
	&l3 POP2 #0003
		&move .program/ptr LDZ2 ADD2 .program/ptr STZ2 JMP2r



(
@helpers )


@@ 163,6 243,14 @@ JMP2r
(
@|stdlib )

@phex ( short* -- )

	SWP ,&b JSR
	&b ( byte -- ) DUP #04 SFT ,&c JSR
	&c ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO

JMP2r

@perr ( src* str* -- ) &w LDAk #19 DEO INC2 LDAk ,&w JCN POP2 JMP2r




@@ 200,8 288,22 @@ JMP2r
	"ADD "SUB "MUL "DIV "AND "ORA "EOR "SFT
	&brk "BRK

@runes
	"| =library/do-padabs "$ =library/do-padrel
	"@ =library/do-toplab "& =library/do-sublab
	", =library/do-litrel "_ =library/do-rawrel
	". =library/do-litzep "- =library/do-rawzep
	"; =library/do-litabs "= =library/do-rawabs
	"? =library/do-litjmi "! =library/do-litjci
	"[ =library/do-ignore "] =library/do-ignore
	"# =library/do-lithex "" =library/do-rawstr
	"~ =library/do-inc
	&err

(
@|buffers )

@token $20

@rom