fixed bug

This commit is contained in:
Valk Richard Li
2019-11-14 20:52:16 +08:00
committed by GitHub
parent c421f726fa
commit 6081c643d0
6 changed files with 25 additions and 11 deletions

View File

@@ -5,7 +5,6 @@
int exit_type=0;
std::stack<var> ret_stack; // for function ret use
std::list<var> parameter; // for function call use
var abstract_syntax_tree::calculation()
@@ -469,10 +468,10 @@ var abstract_syntax_tree::call_identifier()
}
else if(i->type==__call_function && temp.get_type()==__var_function)
{
parameter.clear();
std::list<var> parameter;
for(std::list<abstract_syntax_tree>::iterator j=i->children.begin();j!=i->children.end();++j)
parameter.push_back(j->calculation());
temp=temp.get_function().run_func();
temp=temp.get_function().run_func(parameter);
}
else
{
@@ -738,7 +737,7 @@ int abstract_syntax_tree::run_ifelse()
return ret;
}
var abstract_syntax_tree::run_func()
var abstract_syntax_tree::run_func(std::list<var> parameter)
{
var ret;
scope.add_new_block_scope();

View File

@@ -206,7 +206,7 @@ class abstract_syntax_tree
void run_root();
int run_loop();
int run_ifelse();
var run_func();
var run_func(std::list<var>);
int run_block();
};

View File

@@ -48,6 +48,5 @@ void alert_sound()
/* global varia in abstract_syntax_tree.cpp :
int exit_type; // record the state of runtime
std::stack<var> ret_stack; // for function ret use
std::list<var> parameter; // for function call use
*/
#endif

View File

@@ -88,6 +88,13 @@ class resource_file
resource.clear();
return;
}
void add_lib()
{
std::string lib_name;
lib_name="lib/math.nas";
input_file(lib_name);
return;
}
void input_file(std::string filename)
{
std::ifstream fin(filename,std::ios::binary);

View File

@@ -1,12 +1,18 @@
var fabs=func(__x)
var abs=func(__x)
{
if(x>0){return __x;}
if(__x>0){return __x;}
else{return -__x;}
};
var ln=func(__x)
var asr=func(__x,__y)
{
return (1+8/(1+__x)+1/__x)*(__x-1)/6;
if(abs(__y-__x)<=0.1){return (1/__x+8/(__x+__y)+1/__y)*(__y-__x)/6;}
var __mid=(__x+__y)/2;
return asr(__x,__mid)+asr(__mid,__y);
};
var ln=func(_x)
{
return asr(1,_x);
};
var log=func(__a,__x)
@@ -26,7 +32,7 @@ var pow=func(__x,__num)
{
if(__num==0){return 1;}
else if(__num<0){return 1/pow(__x,-__num);}
else{return exp(__x*ln(__num));}
else{return exp(__num*ln(__x));}
};
var sigmoid=func(__x)

View File

@@ -25,6 +25,7 @@ int main()
std::cout<<">> 7. [del ] |delete program in memory."<<std::endl;
std::cout<<">> 8. [run ] |run the programme in stack. (-lexer -parser)"<<std::endl;
std::cout<<">> 9. [rs ] |check the source program."<<std::endl;
std::cout<<">>10. [lib ] |add lib into resource codes."<<std::endl;
}
else if(command=="cls")
{
@@ -42,6 +43,8 @@ int main()
lex.scanner(prog.get_resource());
lex.print_token_list();
}
else if(command=="lib")
prog.add_lib();
else if(command=="del")
{
prog.set_clear();