expression.c

来自「安装DDD之前」· C语言 代码 · 共 136 行

C
136
字号
/* * $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 + =
减小字号Ctrl + -
显示快捷键?