optimize codes

This commit is contained in:
ValKmjolnir
2022-01-16 22:48:00 +08:00
parent 2ff88b7073
commit a51b7fe11a
10 changed files with 128 additions and 168 deletions
+34 -18
View File
@@ -1,29 +1,45 @@
import("lib.nas");
var filename=["main.cpp","nasal_err.h","nasal_ast.h","nasal_builtin.h","nasal_codegen.h","nasal_gc.h","nasal_import.h","nasal_lexer.h","nasal_parse.h","nasal_vm.h","nasal_dbg.h","nasal.h"];
var space=[" "," "," ","",""," "," "," "," "," "," "," "];
var enter_cnt=func(s)
{
var (cnt,len,enter)=(0,size(s),'\n'[0]);
var filename=[
"main.cpp",
"nasal_err.h",
"nasal_ast.h",
"nasal_builtin.h",
"nasal_codegen.h",
"nasal_gc.h",
"nasal_import.h",
"nasal_lexer.h",
"nasal_parse.h",
"nasal_vm.h",
"nasal_dbg.h",
"nasal.h"
];
var space=[
" ",
" ",
" ",
"",
"",
" ",
" ",
" ",
" ",
" ",
" ",
" "
];
var count=func(s,c){
var (cnt,len,ch)=(0,size(s),c[0]);
for(var i=0;i<len;i+=1)
cnt+=(s[i]==enter);
return cnt;
}
var semic_cnt=func(s)
{
var (cnt,len,semi)=(0,size(s),';'[0]);
for(var i=0;i<len;i+=1)
cnt+=(s[i]==semi);
cnt+=(s[i]==ch);
return cnt;
}
func(){
var (bytes,line,semi)=(0,0,0);
forindex(var i;filename)
{
forindex(var i;filename){
var s=io.fin(filename[i]);
bytes+=size(s);
var line_cnt=enter_cnt(s);
var semi_cnt=semic_cnt(s);
var (line_cnt,semi_cnt)=(count(s,'\n'),count(s,';'));
println(filename[i],space[i],'| ',line_cnt,' \tline | ',semi_cnt,' \tsemi');
bytes+=size(s);
line+=line_cnt;
semi+=semi_cnt;
}
+3 -3
View File
@@ -5,7 +5,7 @@ var table=[
['q1','1','1','R','q1'],
['q1','0','0','S','q2'],
['q2','0','1','R','q3'],
['q3',' ',' ','S','q3']
['q3',nil,nil,'S','q3']
];
var prt=func(state,pointer,paper,act=nil){
print(state,':',pointer,':',act!=nil?act:'','\n\t');
@@ -19,7 +19,7 @@ var prt=func(state,pointer,paper,act=nil){
print(s,'^\n');
}
var run=func(table,node,start,stop){
var paper=['0','1','0','1','0','a'];
var paper=['0','1','1','1','0','1','0','a'];
var pointer=0;
foreach(var action;table){
if(!contains(node,action[0]))
@@ -37,7 +37,7 @@ var run=func(table,node,start,stop){
while(state!=stop){
foreach(var action;table)
if(action[0]==state and (action[1]==paper[pointer] or action[1]==' ')){
paper[pointer]=action[2]==' '?paper[pointer]:action[2];
paper[pointer]=action[2]==nil?paper[pointer]:action[2];
if(action[3]=='L') pointer-=1;
elsif(action[3]=='R') pointer+=1;
elsif(action[3]!='S') die("invalid action <"~action[3]~'>');