remove isbpl.isbpl
This commit is contained in:
parent
0176503ece
commit
01ac076898
1 changed files with 0 additions and 146 deletions
146
isbpl.isbpl
146
isbpl.isbpl
|
@ -1,146 +0,0 @@
|
||||||
def insns
|
|
||||||
|
|
||||||
func main { # "entry point returning int" pop
|
|
||||||
def insns filename
|
|
||||||
=args # "put arg array into args var" pop
|
|
||||||
args 0 aget =filename
|
|
||||||
|
|
||||||
# "Start compile" pop
|
|
||||||
filename _file compile
|
|
||||||
|
|
||||||
0
|
|
||||||
}
|
|
||||||
|
|
||||||
def ptr 0 =ptr
|
|
||||||
|
|
||||||
# "function to fail the compiler due to an oversight by isbpl devs" pop
|
|
||||||
func internal_error {
|
|
||||||
"internal_error\n" puts
|
|
||||||
# "arg is on stack, no need for variables etc" pop
|
|
||||||
"\n" strconcat puts
|
|
||||||
2 exit
|
|
||||||
}
|
|
||||||
|
|
||||||
func is_space {
|
|
||||||
# "each line: dup-d or-d -> or-d dup-d" pop
|
|
||||||
dup " " eq
|
|
||||||
swap dup "\n" eq or
|
|
||||||
swap dup "\r" eq or
|
|
||||||
swap dup "\t" eq or
|
|
||||||
swap dup "" eq or
|
|
||||||
# "dup-d or-d -> or-d dup-d -> or-d" pop
|
|
||||||
swap pop swap
|
|
||||||
}
|
|
||||||
|
|
||||||
func read_string {
|
|
||||||
def s "" =s
|
|
||||||
def insn
|
|
||||||
|
|
||||||
while { 1 } {
|
|
||||||
insns ptr aget =insn
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# "function to read a block of insns" pop
|
|
||||||
func read_block {
|
|
||||||
insns ptr aget dup # "dup the insn for later use" pop ( "{" eq not if {
|
|
||||||
"ERROR: read_block called with invalid ptr" internal_error
|
|
||||||
} )
|
|
||||||
def insn =insn # "insn was dup'd" pop
|
|
||||||
|
|
||||||
insn is_space not if {
|
|
||||||
# "if the insn is anything useful" pop
|
|
||||||
insn 0 aget '"' eq if { read_string }
|
|
||||||
}
|
|
||||||
|
|
||||||
ptr dup ++ =ptr
|
|
||||||
}
|
|
||||||
|
|
||||||
func compile {
|
|
||||||
def file
|
|
||||||
def content
|
|
||||||
def i
|
|
||||||
def ln
|
|
||||||
def j
|
|
||||||
def c
|
|
||||||
=file
|
|
||||||
|
|
||||||
# "read & split content" pop
|
|
||||||
0 _char ( file flength ) anew "\n" strsplit =content
|
|
||||||
|
|
||||||
1 neg =i
|
|
||||||
# "preprocess string" pop
|
|
||||||
while { ( i 1 + =i ) ( i content alen lt ) } {
|
|
||||||
content i aget =ln
|
|
||||||
# "remove tabs/spaces" pop
|
|
||||||
while { ( ln 0 aget dup ) eq ' ' eq '\t' or } {
|
|
||||||
# "remove first character" pop
|
|
||||||
ln 1 ln alen strsub =ln
|
|
||||||
}
|
|
||||||
# "remove comments" pop
|
|
||||||
1 neg =j
|
|
||||||
while { ( j 1 + =j ) ( j ln alen lt ) } {
|
|
||||||
( ln j aget dup =c dup ) ( '\"' eq '\'' eq or ) if {
|
|
||||||
j 1 + =j
|
|
||||||
while { ( ln j aget dup =c dup ) ( '\"' eq '\'' eq or ) not } {
|
|
||||||
j ( c '\\' eq if { 2 } else { 1 } ) + =j
|
|
||||||
}
|
|
||||||
}
|
|
||||||
c '#' eq if {
|
|
||||||
ln 0 j strsub
|
|
||||||
1 stop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# "join content" pop
|
|
||||||
content " " strjoin " " strsplit =content
|
|
||||||
|
|
||||||
content 1 mkcode
|
|
||||||
}
|
|
||||||
|
|
||||||
func mkcode {
|
|
||||||
def allowfunc
|
|
||||||
def content
|
|
||||||
def definefunc
|
|
||||||
def level
|
|
||||||
def i
|
|
||||||
=allowfunc
|
|
||||||
=content
|
|
||||||
|
|
||||||
1 neg =i
|
|
||||||
0 dup =isnative
|
|
||||||
dup =funcname
|
|
||||||
dup =definefunc
|
|
||||||
dup =level
|
|
||||||
pop
|
|
||||||
while { ( i 1 + =i ) ( i content alen lt ) } {
|
|
||||||
content i aget =keyword
|
|
||||||
keyword "" eq not if {
|
|
||||||
allowfunc if {
|
|
||||||
funcname 0 eq not keyword "{" eq and if {
|
|
||||||
i ( content i 1 + content alen strsub 0 mkcode ) + =i
|
|
||||||
content i aget =keyword
|
|
||||||
2 stop
|
|
||||||
}
|
|
||||||
definefunc if {
|
|
||||||
keyword =funcname
|
|
||||||
}
|
|
||||||
keyword "func" eq =definefunc
|
|
||||||
keyword "native" eq =native
|
|
||||||
}
|
|
||||||
keyword '{' if { level 1 + =level }
|
|
||||||
keyword '}' if { level 1 - =level }
|
|
||||||
keyword 'if' if {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
level 1 neg eq if { 1 stop }
|
|
||||||
}
|
|
||||||
|
|
||||||
i
|
|
||||||
}
|
|
||||||
|
|
||||||
func append {
|
|
||||||
cmp swap "\n" strconcat strconcat =cmp
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue