update
This commit is contained in:
parent
9fe7a86a3b
commit
7a93f5b89b
21
README.md
21
README.md
|
@ -34,13 +34,13 @@ Better choose the latest update of the interpreter.
|
|||
|
||||
MUST USE -O2/-O3 if want to optimize the interpreter!
|
||||
|
||||
Also remember to use g++ and clang++.
|
||||
Also remember to use g++ or clang++.
|
||||
|
||||
> g++ | clang++ -std=c++11 -O2 main.cpp -o nasal.exe
|
||||
> [cpp compiler] -std=c++11 -O2 main.cpp -o nasal.exe
|
||||
|
||||
Or use this in linux/macOS/Unix
|
||||
|
||||
> g++ | clang++ -std=c++11 -O2 main.cpp -o nasal
|
||||
> [cpp compiler] -std=c++11 -O2 main.cpp -o nasal
|
||||
|
||||
## How to Use?
|
||||
|
||||
|
@ -71,7 +71,11 @@ The interpreter's interactive mode will do this automatically,so you don't need
|
|||
LL(k) parser.
|
||||
|
||||
```javascript
|
||||
(var a,b,c)=[{b:nil},[1,2],func{return 0;}];
|
||||
(var a,b,c)=[
|
||||
{b:nil},
|
||||
[1,2],
|
||||
func{return 0;}
|
||||
];
|
||||
(a.b,b[0],c)=(1,2,3);
|
||||
```
|
||||
|
||||
|
@ -485,7 +489,13 @@ var b="another string";
|
|||
var b=`c`;
|
||||
|
||||
var c=[];
|
||||
var c=[0,nil,{},[],func(){return 0;}];
|
||||
var c=[
|
||||
0,
|
||||
nil,
|
||||
{},
|
||||
[],
|
||||
func(){return 0;}
|
||||
];
|
||||
append(c,0,1,2);
|
||||
|
||||
var d={
|
||||
|
@ -690,6 +700,7 @@ nasal_val* builtin_print(std::vector<nasal_val*>& local_scope,nasal_gc& gc)
|
|||
case vm_hash: i->ptr.hash->print(); break;
|
||||
case vm_func: std::cout<<"func(...){...}"; break;
|
||||
}
|
||||
std::cout<<std::flush;
|
||||
// if a nasal value is not in use,use gc::del_reference to delete it
|
||||
// generate return value,use gc::gc_alloc(type) to make a new value
|
||||
// or use reserved reference gc.nil_addr/gc.one_addr/gc.zero_addr
|
||||
|
|
|
@ -124,6 +124,7 @@ nasal_val* builtin_print(std::vector<nasal_val*>& local_scope,nasal_gc& gc)
|
|||
case vm_hash: i->ptr.hash->print(); break;
|
||||
case vm_func: std::cout<<"func(...){...}"; break;
|
||||
}
|
||||
std::cout<<std::flush;
|
||||
// generate return value
|
||||
return gc.nil_addr;
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ private:
|
|||
nasal_ast func_gen();
|
||||
nasal_ast args_gen();
|
||||
nasal_ast expr();
|
||||
nasal_ast exprs_gen();
|
||||
nasal_ast exprs();
|
||||
nasal_ast calc();
|
||||
nasal_ast or_expr();
|
||||
nasal_ast and_expr();
|
||||
|
@ -362,7 +362,7 @@ nasal_ast nasal_parse::func_gen()
|
|||
node.add_child(args_gen());
|
||||
else
|
||||
node.add_child(null_node_gen());
|
||||
node.add_child(exprs_gen());
|
||||
node.add_child(exprs());
|
||||
return node;
|
||||
}
|
||||
nasal_ast nasal_parse::args_gen()
|
||||
|
@ -476,7 +476,7 @@ nasal_ast nasal_parse::expr()
|
|||
}
|
||||
return node;
|
||||
}
|
||||
nasal_ast nasal_parse::exprs_gen()
|
||||
nasal_ast nasal_parse::exprs()
|
||||
{
|
||||
if(tok_list[ptr].type==tok_eof)
|
||||
{
|
||||
|
@ -875,7 +875,7 @@ nasal_ast nasal_parse::while_loop()
|
|||
match(tok_lcurve);
|
||||
node.add_child(calc());
|
||||
match(tok_rcurve);
|
||||
node.add_child(exprs_gen());
|
||||
node.add_child(exprs());
|
||||
return node;
|
||||
}
|
||||
nasal_ast nasal_parse::for_loop()
|
||||
|
@ -921,7 +921,7 @@ nasal_ast nasal_parse::for_loop()
|
|||
else
|
||||
node.add_child(calc());
|
||||
match(tok_rcurve);
|
||||
node.add_child(exprs_gen());
|
||||
node.add_child(exprs());
|
||||
return node;
|
||||
}
|
||||
nasal_ast nasal_parse::forei_loop()
|
||||
|
@ -945,7 +945,7 @@ nasal_ast nasal_parse::forei_loop()
|
|||
die(error_line,"expected vector");
|
||||
node.add_child(calc());
|
||||
match(tok_rcurve);
|
||||
node.add_child(exprs_gen());
|
||||
node.add_child(exprs());
|
||||
return node;
|
||||
}
|
||||
nasal_ast nasal_parse::new_iter_gen()
|
||||
|
@ -976,7 +976,7 @@ nasal_ast nasal_parse::conditional()
|
|||
match(tok_lcurve);
|
||||
tmp.add_child(calc());
|
||||
match(tok_rcurve);
|
||||
tmp.add_child(exprs_gen());
|
||||
tmp.add_child(exprs());
|
||||
node.add_child(std::move(tmp));
|
||||
// end of if-expression
|
||||
while(tok_list[ptr].type==tok_elsif)
|
||||
|
@ -986,14 +986,14 @@ nasal_ast nasal_parse::conditional()
|
|||
match(tok_lcurve);
|
||||
tmp.add_child(calc());
|
||||
match(tok_rcurve);
|
||||
tmp.add_child(exprs_gen());
|
||||
tmp.add_child(exprs());
|
||||
node.add_child(std::move(tmp));
|
||||
}
|
||||
if(tok_list[ptr].type==tok_else)
|
||||
{
|
||||
nasal_ast tmp(tok_list[ptr].line,ast_else);
|
||||
match(tok_else);
|
||||
tmp.add_child(exprs_gen());
|
||||
tmp.add_child(exprs());
|
||||
node.add_child(std::move(tmp));
|
||||
}
|
||||
return node;
|
||||
|
|
Loading…
Reference in New Issue