optimize test files

httptest.nas: when clicking mandel.nas link, this may cause memory overflow in new gc
This commit is contained in:
ValKmjolnir 2023-01-23 23:14:34 +08:00
parent d03273b4e1
commit aef7936292
9 changed files with 4243 additions and 4909 deletions

View File

@ -127,6 +127,10 @@ var n=2.147e16; # dec
var n=1e-10; # dec var n=1e-10; # dec
var n=0xAA55; # hex var n=0xAA55; # hex
var n=0o170001; # oct var n=0o170001; # oct
# caution: true and false also useful in nasal now
var n=true; # in fact n is now 1.0
var n=false; # in face n is now 0.0
``` ```
__`str`__ has 3 formats. The third one is used to declare a character. __`str`__ has 3 formats. The third one is used to declare a character.

View File

@ -107,12 +107,16 @@ var spc=nil;
__`num`__ 有三种形式:十进制十六进制以及八进制。并且该类型使用IEEE754标准的浮点数`double`格式来存储。 __`num`__ 有三种形式:十进制十六进制以及八进制。并且该类型使用IEEE754标准的浮点数`double`格式来存储。
```javascript ```javascript
# this language use '#' to write notes # 该语言用 '#' 来作为注释的开头
var n=2.71828; # dec var n=2.71828; # dec 十进制
var n=2.147e16; # dec var n=2.147e16; # dec 十进制
var n=1e-10; # dec var n=1e-10; # dec 十进制
var n=0xAA55; # hex var n=0xAA55; # hex 十六进制
var n=0o170001; # oct var n=0o170001; # oct 八进制
# 注意: true 和 false 关键字在现在的 nasal 里也是可用的
var n=true; # n 实际上是数字 1.0
var n=false; # n 实际上是数字 0.0
``` ```
__`str`__ 也有三种不同的格式。第三种只允许包含一个的字符。 __`str`__ 也有三种不同的格式。第三种只允许包含一个的字符。

View File

@ -29,6 +29,7 @@ var char_ttf=[
["██╗ ██╗","╚██╗ ██╔╝"," ╚████╔╝ "," ╚██╔╝ "," ██║ "," ╚═╝ "], ["██╗ ██╗","╚██╗ ██╔╝"," ╚████╔╝ "," ╚██╔╝ "," ██║ "," ╚═╝ "],
["███████╗","╚══███╔╝"," ███╔╝ "," ███╔╝ ","███████╗","╚══════╝"], ["███████╗","╚══███╔╝"," ███╔╝ "," ███╔╝ ","███████╗","╚══════╝"],
]; ];
var trans_ttf=func(string){ var trans_ttf=func(string){
var str=["","","","","",""]; var str=["","","","","",""];
for(var i=0;i<size(string);i+=1){ for(var i=0;i<size(string);i+=1){
@ -47,6 +48,7 @@ var trans_ttf=func(string){
println(i); println(i);
return; return;
} }
var curve1=func(line=4){ var curve1=func(line=4){
var table=["╚","═","╝","╔","║","╗"]; var table=["╚","═","╝","╔","║","╗"];
rand(100); rand(100);
@ -58,6 +60,7 @@ var curve1=func(line=4){
} }
print(s); print(s);
} }
var curve2=func(line=2){ var curve2=func(line=2){
var shadow=["░","▒","▓","█","▀","▄","▐","▌"]; var shadow=["░","▒","▓","█","▀","▄","▐","▌"];
rand(100); rand(100);
@ -69,6 +72,7 @@ var curve2=func(line=2){
} }
print(s); print(s);
} }
var curve3=func(line=2){ var curve3=func(line=2){
var arr=[ var arr=[
0,1,2,3,4,5,6,7,8, 0,1,2,3,4,5,6,7,8,
@ -91,11 +95,12 @@ var curve3=func(line=2){
} }
return; return;
} }
var curve4=func(line=4){ var curve4=func(line=4){
var shadow=["m░\e[0m","m▒\e[0m","m▓\e[0m","m█\e[0m","m▀\e[0m","m▄\e[0m","m▐\e[0m","m▌\e[0m"]; var shadow=["m░\e[0m","m▒\e[0m","m▓\e[0m","m█\e[0m","m▀\e[0m","m▄\e[0m","m▐\e[0m","m▌\e[0m"];
var front=[ var front=[
"30","31","32","33","34","35","36","37", "30","31","32","33","34","35","36","37",
"90","91","92","93","94","95","96","97" "90","91","92","93","94","95","96","97",
]; ];
var back=[ var back=[
"40","41","42","43","44","45","46","47", "40","41","42","43","44","45","46","47",
@ -108,6 +113,7 @@ var curve4=func(line=4){
print('\n'); print('\n');
} }
} }
var curve5=func(line=4){ var curve5=func(line=4){
var vec=["▀▄─","▄▀─","▀─▄","▄─▀"]; var vec=["▀▄─","▄▀─","▀─▄","▄─▀"];
for(var (y,p)=(0,0);y!=line;y+=1){ for(var (y,p)=(0,0);y!=line;y+=1){
@ -118,27 +124,31 @@ var curve5=func(line=4){
p=p>=4?0:p; p=p>=4?0:p;
} }
} }
var ansi_escape_sequence=func(){ var ansi_escape_sequence=func(){
for(var i=0;i<=9;i+=1) for(var i=0;i<10;i+=1)
print(rightpad(i,3),":\e["~i~"mhi\e[0m "); print(rightpad(i,4),":\e["~i~"mhi\e[0m ");
print("\n"); print("\n");
for(var i=30;i<=37;i+=1) for(var i=30;i<40;i+=1)
print(rightpad(i,3),":\e["~i~"mhi\e[0m "); print(rightpad(i,4),":\e["~i~"mhi\e[0m ");
print("\n"); print("\n");
for(var i=40;i<=47;i+=1) for(var i=40;i<50;i+=1)
print(rightpad(i,3),":\e["~i~"mhi\e[0m "); print(rightpad(i,4),":\e["~i~"mhi\e[0m ");
print("\n"); print("\n");
for(var i=90;i<=97;i+=1) for(var i=90;i<100;i+=1)
print(rightpad(i,3),":\e["~i~"mhi\e[0m "); print(rightpad(i,4),":\e["~i~"mhi\e[0m ");
print("\n"); print("\n");
for(var i=100;i<=107;i+=1) for(var i=100;i<110;i+=1)
print(rightpad(i,3),":\e["~i~"mhi\e[0m "); print(rightpad(i,4),":\e["~i~"mhi\e[0m ");
print("\n"); print("\n");
} }
# enable unicode # enable unicode
if(os.platform()=="windows") if(os.platform()=="windows"){
system("chcp 65001"); system("chcp 65001");
}
trans_ttf("just for test");
trans_ttf(" ValKmjolnir "); trans_ttf(" ValKmjolnir ");
curve1(); curve1();
curve2(); curve2();

View File

@ -155,9 +155,10 @@ var color=[
"\e[31m","\e[32m","\e[33m","\e[34m","\e[35m","\e[36m", "\e[31m","\e[32m","\e[33m","\e[34m","\e[35m","\e[36m",
"\e[90m","\e[91m","\e[92m","\e[93m","\e[94m","\e[95m","\e[96m" "\e[90m","\e[91m","\e[92m","\e[93m","\e[94m","\e[95m","\e[96m"
]; ];
func(){
func() {
var cnt=0; var cnt=0;
forindex(var i;char){ forindex(var i;char) {
char[i]=color[cnt]~chr(i)~"\e[0m"; char[i]=color[cnt]~chr(i)~"\e[0m";
cnt+=1; cnt+=1;
if(cnt>12) if(cnt>12)
@ -166,80 +167,81 @@ func(){
}(); }();
var funcs=[ var funcs=[
func{paper[ptr]+=inum[pc];}, func {paper[ptr]+=inum[pc];},
func{ptr+=inum[pc];}, func {ptr+=inum[pc];},
func{if(paper[ptr])pc=inum[pc];}, func {if(paper[ptr])pc=inum[pc];},
func{if(!paper[ptr])pc=inum[pc];}, func {if(!paper[ptr])pc=inum[pc];},
func{paper[ptr]=input()[0];}, func {paper[ptr]=input()[0];},
func{print(char[paper[ptr]]);} func {print(char[paper[ptr]]);}
]; ];
var bf=func(program){ var bf=func(program) {
setsize(paper,131072); setsize(paper,131072);
var len=size(program); var len=size(program);
for(var i=0;i<len;i+=1){ for(var i=0;i<len;i+=1) {
var c=chr(program[i]); var c=chr(program[i]);
if(c=='+' or c=='-'){ if(c=='+' or c=='-') {
append(code,add); append(code,add);
append(inum,0); append(inum,0);
for(;i<len;i+=1){ for(;i<len;i+=1) {
if(chr(program[i])=='+') if(chr(program[i])=='+') {
inum[-1]+=1; inum[-1]+=1;
elsif(chr(program[i])=='-') } elsif(chr(program[i])=='-') {
inum[-1]-=1; inum[-1]-=1;
elsif(chr(program[i])!='\n'){ } elsif(chr(program[i])!='\n') {
i-=1; i-=1;
break; break;
} }
} }
} } elsif(c=='<' or c=='>') {
elsif(c=='<' or c=='>'){
append(code,mov); append(code,mov);
append(inum,0); append(inum,0);
for(;i<len;i+=1){ for(;i<len;i+=1){
if(chr(program[i])=='>') if(chr(program[i])=='>') {
inum[-1]+=1; inum[-1]+=1;
elsif(chr(program[i])=='<') } elsif(chr(program[i])=='<') {
inum[-1]-=1; inum[-1]-=1;
elsif(chr(program[i])!='\n'){ } elsif(chr(program[i])!='\n') {
i-=1; i-=1;
break; break;
} }
} }
} } elsif(c==',') {
elsif(c==','){
append(code,in); append(code,in);
append(inum,0); append(inum,0);
} } elsif(c=='.') {
elsif(c=='.'){
append(code,out); append(code,out);
append(inum,0); append(inum,0);
} } elsif(c=='[') {
elsif(c=='['){
append(code,jf); append(code,jf);
append(inum,0); append(inum,0);
append(stack,size(code)-1); append(stack,size(code)-1);
} } elsif(c==']') {
elsif(c==']'){ if(!size(stack)) {
if(!size(stack))
die("lack ["); die("lack [");
}
var label=pop(stack); var label=pop(stack);
append(code,jt); append(code,jt);
append(inum,label-1); append(inum,label-1);
inum[label]=size(code)-2; inum[label]=size(code)-2;
} }
} }
if(size(stack)){
if(size(stack)) {
die("lack ]"); die("lack ]");
return; return;
} }
# enable ANSI escape sequence # enable ANSI escape sequence
if(os.platform()=="windows") if(os.platform()=="windows") {
system("color"); system("color");
}
# execute
len=size(code); len=size(code);
for(pc=0;pc<len;pc+=1) for(pc=0;pc<len;pc+=1) {
funcs[code[pc]](); funcs[code[pc]]();
}
return; return;
} }

View File

@ -145,79 +145,81 @@ var mandelbrot=
+[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<< +[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<<
<<<<<]]>>>]"; <<<<<]]>>>]";
var bf=func(program) var padding=func(len) {
{ var res="";
for(var i=0;i<len;i+=1) {
res~=" ";
}
return res;
}
var bf=func(program) {
var stack=[]; var stack=[];
var len=size(program); var len=size(program);
var f="#automatically generated by bfconvertor.nas\nimport('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n"; var f="#automatically generated by bfconvertor.nas\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
for(var i=0;i<len;i+=1){ for(var i=0;i<len;i+=1) {
var c=chr(program[i]); var c=chr(program[i]);
if(c=='+' or c=='-'){ if(c=='+' or c=='-') {
var cnt=0; var cnt=0;
for(;i<len;i+=1){ for(;i<len;i+=1) {
if(chr(program[i])=='+') if(chr(program[i])=='+') {
cnt+=1; cnt+=1;
elsif(chr(program[i])=='-') } elsif(chr(program[i])=='-') {
cnt-=1; cnt-=1;
elsif(chr(program[i])!='\n'){ } elsif(chr(program[i])!='\n') {
i-=1; i-=1;
break; break;
} }
} }
if(cnt!=0) if(cnt!=0) {
for(var j=0;j<size(stack);j+=1) f~=padding(size(stack));
f~='\t'; }
if(cnt>0) if(cnt>0) {
f~="paper[ptr]+="~cnt~";\n"; f~="paper[ptr]+="~cnt~";\n";
elsif(cnt<0) } elsif(cnt<0) {
f~="paper[ptr]-="~(-cnt)~";\n"; f~="paper[ptr]-="~(-cnt)~";\n";
}elsif(c=='<' or c=='>'){ }
} elsif(c=='<' or c=='>') {
var cnt=0; var cnt=0;
for(;i<len;i+=1){ for(;i<len;i+=1) {
if(chr(program[i])=='>') if(chr(program[i])=='>') {
cnt+=1; cnt+=1;
elsif(chr(program[i])=='<') } elsif(chr(program[i])=='<') {
cnt-=1; cnt-=1;
elsif(chr(program[i])!='\n'){ } elsif(chr(program[i])!='\n') {
i-=1; i-=1;
break; break;
} }
} }
if(cnt!=0) if(cnt!=0) {
for(var j=0;j<size(stack);j+=1) f~=padding(size(stack));
f~='\t'; }
if(cnt>0) if(cnt>0) {
f~="ptr+="~cnt~";\n"; f~="ptr+="~cnt~";\n";
elsif(cnt<0) } elsif(cnt<0) {
f~="ptr-="~(-cnt)~";\n"; f~="ptr-="~(-cnt)~";\n";
}elsif(c==','){ }
for(var j=0;j<size(stack);j+=1) } elsif(c==',') {
f~='\t'; f~=padding(size(stack));
f~="paper[ptr]=input()[0];\n"; f~="paper[ptr]=input()[0];\n";
}elsif(c=='.'){ } elsif(c=='.') {
for(var j=0;j<size(stack);j+=1) f~=padding(size(stack));
f~='\t';
f~="print(chr(paper[ptr]));\n"; f~="print(chr(paper[ptr]));\n";
}elsif(c=='['){ } elsif(c=='[') {
for(var j=0;j<size(stack);j+=1) f~=padding(size(stack));
f~='\t'; f~="while(paper[ptr]) {\n";
f~="while(paper[ptr])\n";
for(var j=0;j<size(stack);j+=1)
f~='\t';
f~="{\n";
append(stack,0); append(stack,0);
}elsif(c==']'){ } elsif(c==']') {
if(!size(stack)){ if(!size(stack)) {
println("lack ["); println("lack [");
return; return;
} }
pop(stack); pop(stack);
for(var j=0;j<size(stack);j+=1) f~=padding(size(stack));
f~='\t';
f~="}\n"; f~="}\n";
} }
} }
if(size(stack)){ if(size(stack)) {
println("lack ]"); println("lack ]");
return; return;
} }

View File

@ -1,19 +1,12 @@
var condition_true=1; var condition_true=1;
var condition_false=0; var condition_false=0;
if(condition_true) if(condition_true) {
{
var a=1; var a=1;
} } else if(!condition_false) {
else if(!condition_false)
{
var b=1; var b=1;
} } elsif(!condition_true and condition_false) {
elsif(!condition_true and condition_false)
{
print("impossible"); print("impossible");
} } else {
else
{
var c=1; var c=1;
var d=1; var d=1;
} }

View File

@ -2,23 +2,26 @@
# 2021/8/13 # 2021/8/13
# init # init
var hex_num=[ var hex=func(){
'0','1','2','3', var hex_num=[
'4','5','6','7', '0','1','2','3',
'8','9','a','b', '4','5','6','7',
'c','d','e','f' '8','9','a','b',
]; 'c','d','e','f'
var hex=[]; ];
foreach(var i;hex_num) var res=[];
foreach(var j;hex_num) foreach(var i;hex_num){
append(hex,i~j); foreach(var j;hex_num){
append(res,i~j);
}
}
return res;
}();
# read file # read file
var s=func(){ var s=func(){
var filename=[ var filename=[
"LICENSE",
"main.cpp", "main.cpp",
"makefile",
"nasal_ast.h", "nasal_ast.h",
"nasal_builtin.h", "nasal_builtin.h",
"nasal_codegen.h", "nasal_codegen.h",
@ -31,9 +34,11 @@ var s=func(){
"nasal_parse.h", "nasal_parse.h",
"nasal_vm.h", "nasal_vm.h",
"nasal.ebnf", "nasal.ebnf",
"nasal.h", "nasal.h"
"README.md"
]; ];
if(size(runtime.argv())!=0){
return io.fin(runtime.argv()[0]);
}
var ret=""; var ret="";
foreach(var elem;filename) foreach(var elem;filename)
ret~=io.fin(elem); ret~=io.fin(elem);
@ -48,16 +53,18 @@ var hex_index=[0,0,0,0];
# print binary in text format # print binary in text format
var textprint=func(index){ var textprint=func(index){
var info=''; var info="";
if(os.platform()=="windows") if(os.platform()=="windows"){
for(var i=index-cnt;i<index;i+=1) for(var i=index-cnt;i<index;i+=1)
info~=(s[i]<32 or s[i]>=128)?'.':chr(s[i]); info~=(s[i]<32 or s[i]>=128)?".":chr(s[i]);
else }else{
for(var i=index-cnt;i<index;i+=1) for(var i=index-cnt;i<index;i+=1)
info~=(0<=s[i] and s[i]<32)?'.':chr(s[i]); info~=(0<=s[i] and s[i]<32)?".":chr(s[i]);
for(var i=cnt;i<16;i+=1) }
info~='.'; for(var i=cnt;i<16;i+=1){
return ' |'~info~'|\n'; info~=".";
}
return " |"~info~"|\n";
} }
# print index # print index
@ -66,10 +73,10 @@ var indexprint=func(index){
hex_index[i]=index-int(index/256)*256; hex_index[i]=index-int(index/256)*256;
index=int(index/256); index=int(index/256);
} }
var info=''; var info="";
for(var i=3;i>=0;i-=1) for(var i=3;i>=0;i-=1)
info~=hex[hex_index[i]]; info~=hex[hex_index[i]];
return info~' '; return info~" ";
} }
# main # main
@ -82,14 +89,14 @@ func(){
cnt=0; cnt=0;
info=indexprint(i); info=indexprint(i);
}elsif(cnt==8) }elsif(cnt==8)
info~=' '; info~=" ";
cnt+=1; cnt+=1;
info~=hex[s[i]]~' '; info~=hex[s[i]]~" ";
} }
for(var l=cnt;l<16;l+=1) for(var l=cnt;l<16;l+=1)
info~=' '; info~=" ";
if(cnt<=8) if(cnt<=8)
info~=' '; info~=" ";
info~=textprint(i); info~=textprint(i);
print(info); print(info);
}(); }();

View File

@ -73,7 +73,7 @@ var html_read_file=func(filename){
var timer=maketimestamp(); var timer=maketimestamp();
timer.stamp(); timer.stamp();
var keyword=["var","func","for","while","foreach","forindex","break","continue","return","if","else","elsif","nil"]; var keyword=["var","func","for","while","foreach","forindex","break","continue","return","if","else","elsif","nil"];
var file_text=split("",io.fin(filename)); var file_text=io.fin(filename);
var (s,index,len)=("",-1,size(file_text)); var (s,index,len)=("",-1,size(file_text));
var content=""; var content="";
@ -81,12 +81,12 @@ var html_read_file=func(filename){
if(index+1>=len) if(index+1>=len)
return index+1; return index+1;
index+=1; index+=1;
s=file_text[index]; s=char(file_text[index]);
return index; return index;
} }
var prev=func(){ var prev=func(){
index-=1; index-=1;
s=file_text[index]; s=char(file_text[index]);
} }
while(1){ while(1){

File diff suppressed because it is too large Load Diff