コード例 #1
0
ファイル: semantics.c プロジェクト: doniexun/compiler-22
varElement* doDec(TreeNode *p) {
	//printf("doDec\n");
	//printf("TreeNode->production rule: %d\n", p->productionRule);
	switch (p->productionRule) {
		case 1:{
			TreeNode *p1 = p->firstChild;
			//printf("before doDec1\n");
			varElement *elem1 = doVarDec(p1);
			//printf("after doDec1\n");
			return elem1; 
			break;
		}
		case 2:	{
			TreeNode *p1 = p->firstChild;
			TreeNode *p3 = p1->rightBrother->rightBrother;
			//printf("p1->state:%s\n", p1->state);
			//printf("p3->state:%s\n", p3->state);
			//printf("before doDec\n");
			varElement *elem1 = doVarDec(p1);//产生一个结点
			//判断初始化时类型是否匹配
			Type t3 = doExp(p3);
			elem1->initType = t3;
			//将初始化时等号后面的变量类型赋给这个结点的initType;
			fprintf(out_fp, "\tlw, $t0, 0($sp)\n");
			fprintf(out_fp, "\tsw, $t0, %d($sp)\n", elem1->addr_sp - ADDR);
			return elem1;
			break;
		}
	}
	return NULL;
}
コード例 #2
0
ファイル: semantics.c プロジェクト: pysherlock/compiler
varElement* doDec(TreeNode *p) {
	//printf("doDec\n");
	//printf("TreeNode->state:%s\n", p->state);
	switch (p->productionRule) {
		case 1:{
			TreeNode *p1 = p->firstChild;
			varElement *elem1 = doVarDec(p1);
			return elem1; 
			break;
			   }
		case 2:	{//先没有处理初始化
			TreeNode *p1 = p->firstChild;
			TreeNode *p3 = p1->rightBrother->rightBrother;
			//printf("p1->state:%s\n", p1->state);
			//printf("p3->state:%s\n", p3->state);
			varElement *elem1 = doVarDec(p1);//产生一个结点
			//判断初始化时类型是否匹配
			Type t3 = doExp(p3);
			elem1->type = t3;
			//将初始化时等号后面的变量类型赋给这个新结点
			return elem1;
			break;
				}
	}
	return NULL;
}
コード例 #3
0
ファイル: semantics.c プロジェクト: doniexun/compiler-22
varElement* doExtDecList(TreeNode *p) {
	//printf("doExtDecList\n");
	//这个函数会把同一语句中出现的变量串起来
	switch (p->productionRule) {
		case 1:{
			TreeNode *p1 = p->firstChild;
			varElement *elem1 = doVarDec(p1);
			return elem1;
			break;
			   }
		case 2:{
			TreeNode *p1 = p->firstChild;
			TreeNode *p3 = p1->rightBrother->rightBrother;
			varElement *elem1 = doVarDec(p1);
			varElement *elem2 = doExtDecList(p3);
			elem1->next = elem2;
			return elem1;
			break;
			   }
	}
}