예제 #1
0
/*field_def	:	field_name : anonymous_type_def [ NUMBER ] ; */
static psrRetVal_t AR_STDCALL on_named_nesting_field_array(psrNode_t **nodes, size_t count, const wchar_t *name, void *ctx)
{
		{ 
				psrRetVal_t	ret = {AR_S_YES, NULL};		/*搜索g_type_list,有返回Type节点, 否则报告错误程序终止*/
				ast_node_t *name = (ast_node_t*)nodes[0];
				ast_node_t *type = (ast_node_t*)nodes[2];
				ast_node_t *array_size = (ast_node_t*)nodes[4];

				AR_ASSERT(name != NULL && type != NULL);
				AR_ASSERT(name->t == NAME_T && type->t == TYPE_T);

				insert_type(type->type);

				ast_node_t *field_node = new ast_node_t;
				field_node->t = FIELD_T;
				field_node->field = new Field_t;
				field_node->field->name = name->name;
				field_node->field->type = type->type;
				field_node->field->is_array = true;
				field_node->field->array_size = array_size->num;
				
				if(field_node->field->array_size == 0)
				{
					AR_error(AR_ERR_FATAL, L"invalid array size 'anonymous type' : %u\r\n", field_node->field->array_size);
					AR_abort();
				}

				type->type = NULL;
				ret.node = (psrNode_t*)field_node;
				return ret;
			 }
}
예제 #2
0
파일: lunes.c 프로젝트: otrofama/Proyecto
void create_type_table(Ttable *table)
{
	type t_char = create_type(0,-1,1,-1);
	insert_type(tabla,t_char);
	//
	//
	//
	//
	//
	//
}
예제 #3
0
/*named_type_def	:	LEXEME anonymous_type_def ; */
static psrRetVal_t AR_STDCALL on_named_type_def(psrNode_t **nodes, size_t count, const wchar_t *name, void *ctx)
{
		{ 
				psrRetVal_t ret = {AR_S_YES, NULL};
				ast_node_t *type_name = (ast_node_t*)nodes[0];
				ast_node_t *type_node = (ast_node_t*)nodes[1];
				AR_ASSERT(type_name != NULL && type_name->t == NAME_T);
				AR_ASSERT(type_node != NULL && type_node->t == TYPE_T);
				type_node->type->name = type_name->name;
				type_node->type->is_anonymous_type = false;
				insert_type(type_node->type);
				return ret;

			 }
}
예제 #4
0
void insert()
{
    pdevice prev,cur,p;
    if((p=creatnode())!=NULL)
    {
        printf("请输入设备编号\n");
        scanf("%d",&(p->serialNum));
        if(find(&prev,&cur,&(p->serialNum))==1)
        {
        printf("您输入的编号已存在!\n");
        return;
        }
        getchar();
        printf("请输入设备名称\n");
        gets(p->name);
        printf("请输入设备所在实验室名称\n");
        gets(p->position);
        printf("请输入使用者姓名\n");
        gets(p->user);
        printf("请输入设备价格\n");
        scanf("%lf",&(p->price));
        getchar();
        printf("请输入设备种类\n");
        gets(p->Class);
        insert_type(p->Class);
        printf("请输入设备购买日期,如20090101\n");
        gets(p->date);
        if(prev==NULL)//头插
        {
            p->next=head;
            head=p;
        }
        else
        {
            prev->next=p;
            p->next=cur;
        }
    }

}
예제 #5
0
/*field_def	:	field_name : anonymous_type_def ; */
static psrRetVal_t AR_STDCALL on_named_nesting_field(psrNode_t **nodes, size_t count, const wchar_t *name, void *ctx)
{
		{ 
				psrRetVal_t	ret = {AR_S_YES, NULL};		/*搜索g_type_list,有返回Type节点, 否则报告错误程序终止*/
				ast_node_t *name = (ast_node_t*)nodes[0];
				ast_node_t *type = (ast_node_t*)nodes[2];
				AR_ASSERT(name != NULL && type != NULL);
				AR_ASSERT(name->t == NAME_T && type->t == TYPE_T);

				insert_type(type->type);

				ast_node_t *field_node = new ast_node_t;
				field_node->t = FIELD_T;
				field_node->field = new Field_t;
				field_node->field->name = name->name;
				field_node->field->type = type->type;
				field_node->field->is_array = false;
				field_node->field->array_size = 0;
				type->type = NULL;
				ret.node = (psrNode_t*)field_node;
				return ret;
			 }
}
예제 #6
0
void change()
{
    pdevice p=NULL,q=NULL;
    int num;
    printf("请输入设备编号\n");
    scanf("%d",&num);
    if(find(&p,&q,&num)==0)
    {
        printf("该编号不存在请重新输入");
        return;
    }

    for(;;)
    {
        printf("请选择修改项目(编号不可修改)\n");
        printf("修改设备名称输入1\n修改设备所在实验室输入2\n修改使用者姓名输入3\n修改设备价格输入4\n修改设备种类输入5\n修改设备购买日期输入6\n");
        printf("不再进行修改输入7\n");
        int a;
        scanf("%d",&a);
        getchar();
        if(a!=7)
            printf("请输入修改后的信息:\n");
        getchar();
        switch(a)
        {
        case 1:gets(q->name);break;
        case 2:gets(q->position);break;
        case 3:gets(q->user);break;
        case 4:scanf("%lf",&(q->price));getchar();break;
        case 5:delete_type(q->Class);gets(q->Class);insert_type(q->Class);break;//设备种类
        case 6:gets(q->date);break;
        }
        if(a==7)
        return;
        getchar();
    }
}