⚡ optimize test files
httptest.nas: when clicking mandel.nas link, this may cause memory overflow in new gc
This commit is contained in:
parent
d03273b4e1
commit
aef7936292
|
@ -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.
|
||||
|
|
|
@ -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`__ 也有三种不同的格式。第三种只允许包含一个的字符。
|
||||
|
|
|
@ -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();
|
||||
|
|
66
test/bf.nas
66
test/bf.nas
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}();
|
|
@ -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){
|
||||
|
|
8862
test/mandel.nas
8862
test/mandel.nas
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue