コード例 #1
0
ファイル: NPS.CPP プロジェクト: chemikadze/oldschool
int TSolver::checkexpr()
{int i,j;
 int SL=strlen(S);
 if (SL==1)
   if (!(isconst(S[0])||isnumc(S[0])) )
     {seterr(E_EXPR);
      return 0;
     }
   else return 1;
 if (!(isnumc(S[SL-1])||S[SL-1]==')'||S[SL-1]==']'||isconst(S[SL-1])))
   {seterr(E_EXPR);
    return 0;
   }
#define ib(x) (i>0?(x):1)
 for (i=0;i<SL-1;i++)
   {if (isfn(S[i])||isconst(S[i])||issymbevul(S[i])||S[i]=='('||S[i]=='[')
    if(!( ( isfn(S[i]) && (S[i+1]=='(') )||
          ( i>0?S[i]=='(' && isfn(S[i-1]):1 )||
          ( isconst(S[i]) && (issymbevul(S[i+1])||S[i+1]==')'||S[i+1]==']') )||
          ( ((issymbevul(S[i])||S[i]=='('||S[i]=='[')&&(isnumc(S[i+1])||S[i+1]=='-'||S[i+1]=='_'||isstrevul(S[i+1])||S[i+1]=='('||S[i+1]=='[')) )
         )
      )
      {seterr(E_EXPR);
       return 0;
      }
   }
 return 1;
}
コード例 #2
0
void MoveSelectionUp(char *pText, long *nCharIndex, int isfn(int))
{
    while (((*nCharIndex) < SB_NUM_COLS) && (isfn(pText[(*nCharIndex)])))
    {
        (*nCharIndex)++;
    }
}
コード例 #3
0
void MoveSelectionDown(char *pText, long *nCharIndex, int isfn(int))
{
    while (((*nCharIndex) > 0) && (isfn(pText[(*nCharIndex) - 1])))
    {
        (*nCharIndex)--;
    }
}
コード例 #4
0
ファイル: NPS.CPP プロジェクト: chemikadze/oldschool
int prior(const char f)           //gives priority of function
{if (isfn(f))  return 0;
 switch (f)
   {case '(':
    case '[': return 0;
    case ']':
    case ')': return 1;
    case f_op_root:
    case f_op_pow:
    case '^':    return 2;
    case '*':
    case '/':  return 3;
    case '+':
    case '-':  return 4;
    case '_':  return 5;
    case ',':  return 6;
    default:   return -1;
   }
}
コード例 #5
0
ファイル: NPS.CPP プロジェクト: chemikadze/oldschool
int argcnt(const char c)                //count of arguments
{if (isconst(c)) return 0;
 if (isfn(c) && c!=fpow && c!=f_op_pow && c!=f_op_root && c!=froot && c!=flogn || c=='!' || c=='_') return 1;
 return 2;
}
コード例 #6
-1
ファイル: NPS.CPP プロジェクト: chemikadze/oldschool
char* TSolver::convtopol()   //converts symbol-function string to polish record
{if (S==NULL || !strlen(S)) seterr(E_VOID);
 char* r;
 if (Err!=E_NO)
   {ERROR:
    if (r!=NULL) free(r);
    free(S);
    return S=NULL;
   }
 int i,j=0;
 int p;
 int SL=strlen(S);
 r=(char*)calloc(SL*2+2,sizeof(char));
 r[0]='\0';
 cst_clear;
 for (i=0;S[i]!='\0';i++)
   {if (isnumc(S[i]) || isconst(S[i]) || (S[i]=='-' && (minusE || minusN)))
      {r[j++]=S[i];
       continue;
      }
    if (S[i]=='!')
      {addspc();
       r[j++]=S[i];
       addspc();
       continue;
      }
    p=prior(S[i]);
      {if (S[i]==')')
	 {addspc();
	  while ((!cst_free) && cst_end!='(')
	    {r[j++]=cpop();
	     r[j++]=' ';
	    }
	  cpop();
	  if ((!cst_free) && isfn(cst_end))
	    {r[j++]=cpop();
	     r[j++]=' ';
	    }
	  continue;
	 }

       if (S[i]==']')
	 {addspc();
	  while ((!cst_free) && cst_end!='[')
	    {r[j++]=cpop();
	     r[j++]=' ';
	    }
	  cpop();
	  r[j++]=f_abs;
          r[j++]=' ';
	  continue;
	 }
       if ((((!cst_free) && (p>=prior(cst_end)) && (prior(cst_end)>0)&&cst_end!='_'&&S[i]!='_') || S[i]==','))
	   {addspc();
	    while ((!cst_free) && p>=prior(cst_end) && prior(cst_end)>0)
	      {r[j++]=cpop();
	       r[j++]=' ';
	      }
	    if (S[i]==',') continue;
	   }
       cpush(S[i]);
       if (j>0) addspc();
      }
   }
 if (Err!=E_NO) goto ERROR;
 if (r[j-1]!=' ') r[j++]=' ';
 while (!cst_free)
  {r[j++]=cpop();
   r[j++]=' ';
  }
 if (r[j-1]!=' ') r[j++]=' ';
 r[j]='\0';
 free(S);
 S=strdbl(r);
 free(r);
#ifdef debug
 printf("%s\n",S);
#endif
 poled=1;
 return S;
}