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

📄 expression.c

📁 安装DDD之前
💻 C
字号:
/* * $Id: Expression.c,v 1.1 2004/08/28 19:25:46 dannybackx Exp $ * * Copyright (C) 1995-2000 LessTif Development Team */#include <LTconfig.h>#include <stdio.h>#include <Mrm/MrmPublic.h>#include "main.h"#include "Expression.h"#include "ExpressionList.h"voidExpressionTypeEmit(ExpressionType *etype){    etype->Emit(etype);}/*  *  Swap if needed to make the type of 'etype1' "hold" more than the type of  *  'etype2'.  i.e.  if 'etype1' is integer and 'etype2' is float  -- then swap *  This is similar to the concept of automatic casting in C expressions  *  such as (int) + (float) will evaluate to (float). */voidExpressionHierarchy(ExpressionType **etype1, ExpressionType **etype2){    int Order[] =	{	    0, 11, 12, 0, 0, 0, 0, 10, 0, 0, 0,	    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	};    if (((*etype1)->type >= MrmRtypeMax) || ((*etype2)->type >= MrmRtypeMax) ||	((*etype1)->type <= 0) || ((*etype2)->type <= 0))    {	__MrmExit(LOC, "Can't Evaluate\n");    }    if (Order[(*etype1)->type] > Order[(*etype2)->type])    {	ExpressionType *temp;	temp = *etype1;	*etype1 = *etype2;	*etype2 = temp;	return;    }}voidExpressionTypeAdd(ExpressionType *etype1, ExpressionType *etype2){    if (MrmRtypeAddrName == etype1->type)    {	ExpressionListLookup(&etype1);    }    if (MrmRtypeAddrName == etype2->type)    {	ExpressionListLookup(&etype2);    }    ExpressionHierarchy(&etype1, &etype2);    etype1->value += etype2->value;}voidExpressionTypeSubtract(ExpressionType *etype1, ExpressionType *etype2){    if (MrmRtypeAddrName == etype1->type)    {	ExpressionListLookup(&etype1);    }    if (MrmRtypeAddrName == etype2->type)    {	ExpressionListLookup(&etype2);    }    ExpressionHierarchy(&etype1, &etype2);    etype1->value -= etype2->value;}voidExpressionTypeMultiply(ExpressionType *etype1, ExpressionType *etype2){    if (MrmRtypeAddrName == etype1->type)    {	ExpressionListLookup(&etype1);    }    if (MrmRtypeAddrName == etype2->type)    {	ExpressionListLookup(&etype2);    }    ExpressionHierarchy(&etype1, &etype2);    etype1->value *= etype2->value;}voidExpressionTypeDivide(ExpressionType *etype1, ExpressionType *etype2){    if (MrmRtypeAddrName == etype1->type)    {	ExpressionListLookup(&etype1);    }    if (MrmRtypeAddrName == etype2->type)    {	ExpressionListLookup(&etype2);    }    ExpressionHierarchy(&etype1, &etype2);    etype1->value /= etype2->value;}voidExpressionTypeDelete(ExpressionType *etype1){    /* free(etype1);  */}

⌨️ 快捷键说明

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