⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 detaildesign.txt

📁 FinC is Fava in C! A C-like syntax language. It s designed to apply to embededd system.
💻 TXT
字号:
FinC 0.2版详细设计----------------App类设计App为语言运行环境全局上下文,包含源程序的符号表,全局变量,静态变量等主要域struct FinCApp{	Object parent;	HashTable* hash_global;	HashTable* hash_local;	HashTable* hash_functions;	HashTable* hash_struct;}hash_global, 全局变量hash_local, 局部变量,会随着每次调用上下文而变动。hash_functions, 函数符号表hash_struct, 结构体符号表Data类设计(0.2版本重点更新项目)Action新建消亡建立引用取消引用调用域成员和其他类的接口FinCData声明struct FinCData{	Object parent;//引用位	FinCType type//类型	Vector* child;	FinCData* pointer;//当它是指针类型时,只想的实际的FinCData数据变量	ADT raw;	Bool ref;};parent指示出它的引用参考type指示出数据的类型。其中raw为最关键的数据区域,每个类型的数据有具体的大小,raw域按大小来分配。ref指示出raw是否是引用方式,如果是引用方式,将没有权力释放数据域。child,sub Data矢量表,主要存储的结构为FinCData,从而实现struct声明的可递归性。由于采用的是vector,所以对域成员的引用采用index的方式。指针的处理:raw:指针只是一个4字节长度(不同的机器可能不一样,x86为4字节)的数据域,放置实际的数据块的地址。pointer指向实际的FinCData类型的数据变量。API操作说明FinCData* finc_data_new (FinCType* p_type, ADT p_ref)新建数据,主要是新开辟Type数据类型大小的数据区域。参数:p_type,生成数据块的数据类型p_ref,是否为引用类型返回:新开辟的数据块结构void finc_data_destroy (Object* self)销毁数据参数:self,FinCData本地数据返回:无void finc_data_init_data (ADT self, ADT data)初始化数据参数:self,FinCData本地数据data,数据块载入点返回:无void finc_data_assign (FinCData* self, FinCData* p_src)赋值(复制)内存区参数:self,FinCData本地数据p_src,复制数据块的数据源返回:无void finc_data_set_string (FinCData* self, String* p_value)设置字符串类型数据参数:self,FinCData本地数据p_value,需要设置的字符串返回:无String* finc_data_get_string (FinCData* self)获得字符串类型数据参数:self,FinCData本地数据返回:数据块中的字符串类型void finc_data_set_data (FinCData* self, ADT p_ptr)设置原始内存区指针参数:self,FinCData本地数据p_ptr,设置数据的数据指针返回:无ADT finc_data_get_data (FinCData* self)获得原始内存块参数:self,FinCData本地数据返回:抽象数据类型ADTFinCData* finc_data_convert (FinCData* self, FinCType* p_type)转换数据类型参数:self,FinCData本地数据p_type,需要转换的数据类型返回:转换了的数据结构FinCData* finc_data_get_field (FinCData* self, String* p_name)获得结构体的域数据参数:self,FinCData本地数据p_name,域成员名字返回:获得的域数据Type类修正:FinCType包含如下类型FinCType_CharFinCType_ShortFinCType_IntFinCType_FloatFinCType_DoubleFinCType_BoolFinCType_StringFinCType_PointerFinCType_VoidFinCType_StructFinCType_UnsignedFinCTYpe_StaticFinCTYpe_NativeArray类型FinCTypeArray_NoneFinCTypeArray_FixedFinCTypeArray_Dynamicfinc_type_newfinc_type_new_name通过名字获得类型finc_type_get_sizefinc_type_destroyStruct类设计:struct FinCStruct{	Object parent;	String name;	HashTable hash_field;	int size;};结构成员hash_field采用hash表的方法方法newdestoryadd_fieldget_fieldget_sizeExpr类更改:Expr更改为Node类。控制好debug。COOL库设计:----------加入全新List加入Vector类加入AVL Tree加入新的内存管理MemChenk拥有调试参数,当打开调试参数时,将进行AVL Tree的排序语法实现部分设计:---------------动态包载入decl_package:    PACKAGE V_STRING '{'    decl_pkg_func_list    '}' ';';decl_pkg_func_list:    decl_pkg_func  | decl_pkg_func_list decl_pkg_func;decl_pkg_func  : type identifier '(' decl_param_list ')' ';';结构体decl_struct:	STRUCT identifier '{' { struct_begin(); }	decl_field_list	'}' ';'	{ struct_end(); }变量声明decl_variable:    type declarator_list ';'  | type identifier '[' V_INT ']' ';'declarator_list:    declarator_list, declarator  | declaratordeclarator    identifier { variable_add($1); }  | identifier ASSIGN expr_assign { variable_add_assign($1, $3); }type语法修改如下type:    type_basic	{ $$ = $1; }  | identifier;变量声明修改decl_global:    decl_variable	{ $$ = finc_lang_efunc_create1("global", $1); };decl_local:    decl_variable	{ $$ = finc_lang_efunc_create1("local", $1); };FinCSys系统函数库FinCSys都具有统一的函数声明格式void function (FinCNode* p_node)参数:p_node,语法树结点增加:void finc_sys_pkg (FinCNode* p_node)void finc_sys_struct (FinCNode* p_node)void finc_sys_native_func (FinCNode* p_node)void finc_sys_break (FinCNode* p_node)void finc_sys_continue (FinCNode* p_node)void finc_sys_access (FinCNode* p_node)修正:void finc_sys_cast  (FinCNode* p_node)void finc_sys_global (FinCNode* p_node)void finc_sys_local (FinCNode* p_node)void finc_sys_condition (FinCNode* p_node)void finc_sys_comma (FinCNode* p_node)void finc_sys_content_of (FinCNode* p_node)void finc_sys_addr_of (FinCNode* p_node)void finc_sys_continue (FinCNode* p_node)void finc_sys_break (FinCNode* p_node)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -