Ver código fonte

提交检查

SongZihuan 5 anos atrás
pai
commit
5993cc95bd
5 arquivos alterados com 356 adições e 348 exclusões
  1. 1 0
      README.md
  2. 18 18
      gwarf.c
  3. 121 113
      inter/cfunc.c
  4. 138 139
      inter/interpreter.c
  5. 78 78
      inter/interpreter.h

+ 1 - 0
README.md

@@ -64,5 +64,6 @@ return x n  函数返回值x,返回n层
 * 设置对None的point运算均为None
 * 设置了变量访问权限:protect [受到保护的变量] 和public [公开变量]
 * 设置了变量访问权限:private,根据对``var_list``的标签来判断
+* 面向对象取出重复,``to_error``和``to_object``不用``find_var``,在global的时候就设定好
 ## 关于GWARF
 最后更新时间 : 2020年05月05日 广州

+ 18 - 18
gwarf.c

@@ -41,33 +41,33 @@ int main(){
 
     parser("/home/songzihuan/test.gwf");
     printf("----start run----\n");
-    traverse_global(global_inter->global_code, the_var);
+    traverse_global(global_inter->global_code, the_var, global_inter);
     printf("code end...\n");
     return 0;
 }
 
-void login(var_list *the_var){
-    login_official(the_var, official_func);  // 注册内置函数
+void login(var_list *the_var, inter *global_inter){
+    login_official(the_var, official_func, global_inter);  // 注册内置函数
 
-    class_object *tmp_object = object_login_official(the_var, object_official_func);  // 注册oobject
-    class_object *tmp_gobject = gobject_login_official(the_var, gobject_official_func, tmp_object->the_var);  // 注册goobject
+    class_object *tmp_object = object_login_official(the_var, object_official_func, global_inter);  // 注册oobject
+    class_object *tmp_gobject = gobject_login_official(the_var, gobject_official_func, tmp_object->the_var, global_inter);  // 注册goobject
 
-    int_login_official(the_var, int_official_func, tmp_gobject->the_var);  // 注册int
-    double_login_official(the_var, double_official_func, tmp_gobject->the_var);  // 注册double
-    str_login_official(the_var, str_official_func, tmp_gobject->the_var);  // 注册str
-    bool_login_official(the_var, bool_official_func, tmp_gobject->the_var);  // 注册bool
+    int_login_official(the_var, int_official_func, tmp_gobject->the_var, global_inter);  // 注册int
+    double_login_official(the_var, double_official_func, tmp_gobject->the_var, global_inter);  // 注册double
+    str_login_official(the_var, str_official_func, tmp_gobject->the_var, global_inter);  // 注册str
+    bool_login_official(the_var, bool_official_func, tmp_gobject->the_var, global_inter);  // 注册bool
     
-    class_object *tmp_tuple = tuple_login_official(the_var, tuple_official_func, tmp_gobject->the_var);
-    list_login_official(the_var, list_official_func, tmp_tuple->the_var);  // 注册list
-    dict_login_official(the_var, dict_official_func, tmp_tuple->the_var);  // 注册dict
+    class_object *tmp_tuple = tuple_login_official(the_var, tuple_official_func, tmp_gobject->the_var, global_inter);
+    list_login_official(the_var, list_official_func, tmp_tuple->the_var, global_inter);  // 注册list
+    dict_login_official(the_var, dict_official_func, tmp_tuple->the_var, global_inter);  // 注册dict
 
     // 注册错误类型
-    class_object *tmp_BaseException = BaseException_login_official(the_var, BaseException_official_func, tmp_object->the_var);
-    class_object *tmp_Exception = Exception_login_official(the_var, tmp_BaseException->the_var);
-    NameException_login_official(the_var, tmp_Exception->the_var);
-    IterException_login_official(the_var, tmp_Exception->the_var);
-    AssertException_login_official(the_var, tmp_Exception->the_var);
-    AssignmentException_login_official(the_var, tmp_Exception->the_var);
+    class_object *tmp_BaseException = BaseException_login_official(the_var, BaseException_official_func, tmp_object->the_var, global_inter);
+    class_object *tmp_Exception = Exception_login_official(the_var, tmp_BaseException->the_var, global_inter);
+    NameException_login_official(the_var, tmp_Exception->the_var, global_inter);
+    IterException_login_official(the_var, tmp_Exception->the_var, global_inter);
+    AssertException_login_official(the_var, tmp_Exception->the_var, global_inter);
+    AssignmentException_login_official(the_var, tmp_Exception->the_var, global_inter);
 }
 
 // 合并编译:cd "/home/songzihuan/文档/CProject/gwarf/" && gcc gwarf.c -lm -o gwarf && "/home/songzihuan/文档/CProject/gwarf/"gwarf

Diferenças do arquivo suprimidas por serem muito extensas
+ 121 - 113
inter/cfunc.c


Diferenças do arquivo suprimidas por serem muito extensas
+ 138 - 139
inter/interpreter.c


+ 78 - 78
inter/interpreter.h

@@ -9,8 +9,8 @@
 #define bool int
 
 #define assignment_statement(the_statement,the_var,login_var,right_result) assignment_statement_core(the_statement,the_var,login_var,right_result,0,auto_public)
-#define read_statement_list(the_statement,the_var) read_statement(the_statement,the_var,NULL,NULL,lock)
-#define run_func(base_the_var,the_var,name) run_func_core(base_the_var,the_var,name,false)
+#define read_statement_list(the_statement,the_var,global_inter) read_statement(the_statement,the_var,NULL,NULL,lock,global_inter)
+#define run_func(base_the_var,the_var,name,global_inter) run_func_core(base_the_var,the_var,name,false,global_inter)
 #define GWARF_value_reset {.type=NULL_value,.value.int_value=0,.lock_token=base}
 #define GWARF_result_reset {.value.type=NULL_value,.value.value.int_value=0,.value.lock_token=base}
 
@@ -545,44 +545,44 @@ typedef struct dict_key  // dict的key类型
 } dict_key;
 
 // 函数声明
-GWARF_result operation_func(statement *, var_list *, var_list *);
-GWARF_result while_func(statement *, var_list *);
-GWARF_result if_func(if_list *, var_list *);
-GWARF_result for_func(statement *, var_list *);
-GWARF_result call_back(statement *, var_list *);
-GWARF_result login_var(var_list *, var_list *, parameter *, parameter *);
-GWARF_result call_back_core(GWARF_result, var_list *, parameter *);
-GWARF_result block_func(statement *, var_list *);
-GWARF_result try_func(statement *, var_list *);
-GWARF_result raise_func(statement *, var_list *, bool);
-GWARF_result import_func(statement *, var_list *);
-GWARF_result include_func(statement *, var_list *);
-GWARF_result forin_func(statement *, var_list *);
-GWARF_result assert_func(statement *, var_list *);
-
-GWARF_result add_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result sub_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result mul_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result div_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result pow_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result log_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result sqrt_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result assignment_func(char *, GWARF_result, var_list *, int, int);
-GWARF_result equal_func(GWARF_result, GWARF_result, var_list *, int);
-GWARF_result negative_func(GWARF_result, var_list *);
-GWARF_result assignment_statement_core(statement *, var_list *, var_list *, GWARF_result, bool, int);
-GWARF_result assignment_statement_value(statement *, var_list *, var_list *, GWARF_value);
-GWARF_result not_func(GWARF_result, var_list *);
-GWARF_result or_func(statement *, statement *, var_list *);
-GWARF_result and_func(statement *, statement *, var_list *);
-GWARF_result int_div_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result mod_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result bit_not_func(GWARF_result, var_list *);
-GWARF_result bit_right_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result bit_left_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result bit_notor_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result bit_or_func(GWARF_result, GWARF_result, var_list *);
-GWARF_result bit_and_func(GWARF_result, GWARF_result, var_list *);
+GWARF_result operation_func(statement *, var_list *, var_list *, inter *);
+GWARF_result while_func(statement *, var_list *, inter *);
+GWARF_result if_func(if_list *, var_list *, inter *);
+GWARF_result for_func(statement *, var_list *, inter *);
+GWARF_result call_back(statement *, var_list *, inter *);
+GWARF_result login_var(var_list *, var_list *, parameter *, parameter *, inter *);
+GWARF_result call_back_core(GWARF_result, var_list *, parameter *, inter *);
+GWARF_result block_func(statement *, var_list *, inter *);
+GWARF_result try_func(statement *, var_list *, inter *);
+GWARF_result raise_func(statement *, var_list *, bool, inter *);
+GWARF_result import_func(statement *, var_list *, inter *);
+GWARF_result include_func(statement *, var_list *, inter *);
+GWARF_result forin_func(statement *, var_list *, inter *);
+GWARF_result assert_func(statement *, var_list *, inter *);
+
+GWARF_result add_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result sub_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result mul_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result div_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result pow_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result log_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result sqrt_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result assignment_func(char *, GWARF_result, var_list *, int, int);  // 不需要inter
+GWARF_result equal_func(GWARF_result, GWARF_result, var_list *, int, inter *);
+GWARF_result negative_func(GWARF_result, var_list *, inter *);
+GWARF_result assignment_statement_core(statement *, var_list *, var_list *, GWARF_result, bool, int, inter *);
+GWARF_result assignment_statement_value(statement *, var_list *, var_list *, GWARF_value, inter *);
+GWARF_result not_func(GWARF_result, var_list *, inter *);
+GWARF_result or_func(statement *, statement *, var_list *, inter *);
+GWARF_result and_func(statement *, statement *, var_list *, inter *);
+GWARF_result int_div_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result mod_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result bit_not_func(GWARF_result, var_list *, inter *);
+GWARF_result bit_right_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result bit_left_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result bit_notor_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result bit_or_func(GWARF_result, GWARF_result, var_list *, inter *);
+GWARF_result bit_and_func(GWARF_result, GWARF_result, var_list *, inter *);
 
 double sqrt_(double, double);
 double log_(double, double);
@@ -603,12 +603,12 @@ GWARF_value key_to_str(char *);
 
 bool to_bool(GWARF_value);
 
-GWARF_result get__value__(GWARF_value *, var_list *);
-GWARF_result get__bool__(GWARF_value *, var_list *);
-GWARF_result get__iter__(GWARF_value *, var_list *);
-GWARF_result get__next__(GWARF_value *, var_list *);
-GWARF_result get__assignment__(GWARF_value *, var_list *);
-GWARF_result run_func_core(GWARF_value *, var_list *, char *, bool);
+GWARF_result get__value__(GWARF_value *, var_list *, inter *);
+GWARF_result get__bool__(GWARF_value *, var_list *, inter *);
+GWARF_result get__iter__(GWARF_value *, var_list *, inter *);
+GWARF_result get__next__(GWARF_value *, var_list *, inter *);
+GWARF_result get__assignment__(GWARF_value *, var_list *, inter *);
+GWARF_result run_func_core(GWARF_value *, var_list *, char *, bool, inter *);
 
 int len_only_double(double num);
 int len_double(double num);
@@ -618,57 +618,57 @@ GWARF_value to_object(GWARF_value, var_list *);
 GWARF_result get_object(parameter *, char *, var_list *);
 class_object *make_object(var_list *the_var, var_list *father_var_list);
 
-void login_official_func(int type, int is_class, var_list *the_var, char *name, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *));
-void login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *));
+void login_official_func(int type, int is_class, var_list *the_var, char *name, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
+void login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
 
 // 内置函数
-GWARF_result official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *);
+GWARF_result official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // object内置类
-class_object *object_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *));
-GWARF_result object_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *object_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
+GWARF_result object_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // gobject内置类
-class_object *gobject_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *gobject_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // int内置类
-class_object *int_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *);
+class_object *int_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // double内置类
-class_object *double_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *);
+class_object *double_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // str内置类
-class_object *str_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *str_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // bool内置类
-class_object *bool_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *bool_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // list内置类
-class_object *tuple_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *tuple_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // list内置类
-class_object *list_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *list_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // dict内置类
-class_object *dict_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *dict_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // 错误内置类
-class_object *BaseException_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *), var_list *father_var_list);
-GWARF_result BaseException_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var);
+class_object *BaseException_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+GWARF_result BaseException_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
-class_object *Exception_login_official(var_list *the_var, var_list *father_var_list);
-class_object *NameException_login_official(var_list *the_var, var_list *father_var_list);
-class_object *IterException_login_official(var_list *the_var, var_list *father_var_list);
-class_object *AssertException_login_official(var_list *the_var, var_list *father_var_list);
-class_object *AssignmentException_login_official(var_list *the_var, var_list *father_var_list);
+class_object *Exception_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
+class_object *NameException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
+class_object *IterException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
+class_object *AssertException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
+class_object *AssignmentException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
 
 // 生成错误
 GWARF_result to_error(char *error_info, char *error_type, var_list *the_var);
@@ -726,12 +726,12 @@ parameter *pack_value_parameter(GWARF_value);
 statement *pack_call_name(char *, statement *);
 
 
-GWARF_result traverse(statement *, var_list *, bool);
-GWARF_result traverse_global(statement *, var_list *);
-GWARF_result traverse_get_value(statement *, var_list *, var_list *);
+GWARF_result traverse(statement *, var_list *, bool,inter *);
+GWARF_result traverse_global(statement *, var_list *,inter *);
+GWARF_result traverse_get_value(statement *, var_list *, var_list *,inter *);
 
 inter *get_inter();
-void login(var_list *the_var);
+void login(var_list *the_var, inter *global_inter);
 
 inter *global_inter;
 statement_list *statement_base;

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff