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=0xAA55; # hex
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.

View File

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

View File

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

View File

@ -155,9 +155,10 @@ var color=[
"\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"
];
func(){
func() {
var cnt=0;
forindex(var i;char){
forindex(var i;char) {
char[i]=color[cnt]~chr(i)~"\e[0m";
cnt+=1;
if(cnt>12)
@ -166,80 +167,81 @@ func(){
}();
var funcs=[
func{paper[ptr]+=inum[pc];},
func{ptr+=inum[pc];},
func{if(paper[ptr])pc=inum[pc];},
func{if(!paper[ptr])pc=inum[pc];},
func{paper[ptr]=input()[0];},
func{print(char[paper[ptr]]);}
func {paper[ptr]+=inum[pc];},
func {ptr+=inum[pc];},
func {if(paper[ptr])pc=inum[pc];},
func {if(!paper[ptr])pc=inum[pc];},
func {paper[ptr]=input()[0];},
func {print(char[paper[ptr]]);}
];
var bf=func(program){
var bf=func(program) {
setsize(paper,131072);
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]);
if(c=='+' or c=='-'){
if(c=='+' or c=='-') {
append(code,add);
append(inum,0);
for(;i<len;i+=1){
if(chr(program[i])=='+')
for(;i<len;i+=1) {
if(chr(program[i])=='+') {
inum[-1]+=1;
elsif(chr(program[i])=='-')
} elsif(chr(program[i])=='-') {
inum[-1]-=1;
elsif(chr(program[i])!='\n'){
} elsif(chr(program[i])!='\n') {
i-=1;
break;
}
}
}
elsif(c=='<' or c=='>'){
} elsif(c=='<' or c=='>') {
append(code,mov);
append(inum,0);
for(;i<len;i+=1){
if(chr(program[i])=='>')
if(chr(program[i])=='>') {
inum[-1]+=1;
elsif(chr(program[i])=='<')
} elsif(chr(program[i])=='<') {
inum[-1]-=1;
elsif(chr(program[i])!='\n'){
} elsif(chr(program[i])!='\n') {
i-=1;
break;
}
}
}
elsif(c==','){
} elsif(c==',') {
append(code,in);
append(inum,0);
}
elsif(c=='.'){
} elsif(c=='.') {
append(code,out);
append(inum,0);
}
elsif(c=='['){
} elsif(c=='[') {
append(code,jf);
append(inum,0);
append(stack,size(code)-1);
}
elsif(c==']'){
if(!size(stack))
} elsif(c==']') {
if(!size(stack)) {
die("lack [");
}
var label=pop(stack);
append(code,jt);
append(inum,label-1);
inum[label]=size(code)-2;
}
}
if(size(stack)){
if(size(stack)) {
die("lack ]");
return;
}
# enable ANSI escape sequence
if(os.platform()=="windows")
if(os.platform()=="windows") {
system("color");
}
# execute
len=size(code);
for(pc=0;pc<len;pc+=1)
for(pc=0;pc<len;pc+=1) {
funcs[code[pc]]();
}
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 len=size(program);
var f="#automatically generated by bfconvertor.nas\nimport('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
for(var i=0;i<len;i+=1){
var f="#automatically generated by bfconvertor.nas\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
for(var i=0;i<len;i+=1) {
var c=chr(program[i]);
if(c=='+' or c=='-'){
if(c=='+' or c=='-') {
var cnt=0;
for(;i<len;i+=1){
if(chr(program[i])=='+')
for(;i<len;i+=1) {
if(chr(program[i])=='+') {
cnt+=1;
elsif(chr(program[i])=='-')
} elsif(chr(program[i])=='-') {
cnt-=1;
elsif(chr(program[i])!='\n'){
} elsif(chr(program[i])!='\n') {
i-=1;
break;
}
}
if(cnt!=0)
for(var j=0;j<size(stack);j+=1)
f~='\t';
if(cnt>0)
if(cnt!=0) {
f~=padding(size(stack));
}
if(cnt>0) {
f~="paper[ptr]+="~cnt~";\n";
elsif(cnt<0)
} elsif(cnt<0) {
f~="paper[ptr]-="~(-cnt)~";\n";
}elsif(c=='<' or c=='>'){
}
} elsif(c=='<' or c=='>') {
var cnt=0;
for(;i<len;i+=1){
if(chr(program[i])=='>')
for(;i<len;i+=1) {
if(chr(program[i])=='>') {
cnt+=1;
elsif(chr(program[i])=='<')
} elsif(chr(program[i])=='<') {
cnt-=1;
elsif(chr(program[i])!='\n'){
} elsif(chr(program[i])!='\n') {
i-=1;
break;
}
}
if(cnt!=0)
for(var j=0;j<size(stack);j+=1)
f~='\t';
if(cnt>0)
if(cnt!=0) {
f~=padding(size(stack));
}
if(cnt>0) {
f~="ptr+="~cnt~";\n";
elsif(cnt<0)
} elsif(cnt<0) {
f~="ptr-="~(-cnt)~";\n";
}elsif(c==','){
for(var j=0;j<size(stack);j+=1)
f~='\t';
}
} elsif(c==',') {
f~=padding(size(stack));
f~="paper[ptr]=input()[0];\n";
}elsif(c=='.'){
for(var j=0;j<size(stack);j+=1)
f~='\t';
} elsif(c=='.') {
f~=padding(size(stack));
f~="print(chr(paper[ptr]));\n";
}elsif(c=='['){
for(var j=0;j<size(stack);j+=1)
f~='\t';
f~="while(paper[ptr])\n";
for(var j=0;j<size(stack);j+=1)
f~='\t';
f~="{\n";
} elsif(c=='[') {
f~=padding(size(stack));
f~="while(paper[ptr]) {\n";
append(stack,0);
}elsif(c==']'){
if(!size(stack)){
} elsif(c==']') {
if(!size(stack)) {
println("lack [");
return;
}
pop(stack);
for(var j=0;j<size(stack);j+=1)
f~='\t';
f~=padding(size(stack));
f~="}\n";
}
}
if(size(stack)){
if(size(stack)) {
println("lack ]");
return;
}

View File

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

View File

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

View File

@ -73,7 +73,7 @@ var html_read_file=func(filename){
var timer=maketimestamp();
timer.stamp();
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 content="";
@ -81,12 +81,12 @@ var html_read_file=func(filename){
if(index+1>=len)
return index+1;
index+=1;
s=file_text[index];
s=char(file_text[index]);
return index;
}
var prev=func(){
index-=1;
s=file_text[index];
s=char(file_text[index]);
}
while(1){

File diff suppressed because it is too large Load Diff