coś Ci się chyba Zigi pomieszało.
Po pierwsze do wykonania tego skryptu oprócz inicjalizajnych i cleanupowych funkcji samego php wykorzystuje się tylko jakiś php-owy (albo nawet i nie, może ten z glibc) odpowiednik printf[3].
Po drugie nie ma czegoś takiego jak prosty kalkulator... a już na pewno nie prosty kalkulator obsługujący nawiasy. To już musi być jakiś analizator składni. Jeżeli chcesz prosty kalkulator to kiedyś takowy napisałem, ale on wykonuje wszytko po koleji i ma tylko 4 działania (ale za to obsługa big numbers... z openssl, ale to już mankamenty techniczne). Uruchamiasz: `./bncalc 1 + 2 + 3` itp
Kod
/*
Adam <adam-wieckowski@tlen.pl> Więckowski @ 30.10.2004
Compile: gcc -std=gnu99 -lsll -lc -pedantic -o bncalc bncalc.c
*/
#include <stdio.h>
#include <error.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <openssl/bn.h>
#include <openssl/err.h>
int main(int ac, char *av[])
{
BIGNUM *a, *b, *r;
char buf[512];
BN_CTX *ctx=BN_CTX_new();
a=BN_new();b=BN_new();r=BN_new();
if(!BN_dec2bn(&r,av[1]))
goto error;
for(int i=2;i<=ac;i+=2)
{
if((ac-i)<2)
{
char *buf=BN_bn2dec(r);
printf("%s\n", buf);
/*OPENSSL_*/free(buf);
BN_free(a);BN_free(b);BN_free(r);
return 0;
}
if(!BN_dec2bn(&b,av[i+1]))
goto error;
if(BN_copy(a,r)==NULL)
goto error;
switch(*av[i])
{
case '+':
case 'a':
if(!BN_add(r,a,b))
goto error;
break;
case '-':
case 's':
if(!BN_sub(r,a,b))
goto error;
break;
case '*':
case 'm':
case '.':
if(!BN_mul(r,a,b,ctx))
goto error;
break;
case '/':
case ':':
case 'd':
if(!BN_div(r,NULL,a,b,ctx))
goto error;
break;
}
}
error:
fprintf(stderr,"%s\n",ERR_error_string(ERR_get_error(),buf));
exit(-1);
}
A jeżeli chcesz bardziej elastyczny kalkulator to już musisz rozbić działanie na części, ułożyć zgodnie z kolejnością wykonywania działań.
Zainteresuj się może takimi rzeczami jak
http://mathomatic.orgserve.de/math/. To JEST prosty kalkulator (15.000 linii kodu).
A jeżeli chcesz zobaczyć jak robi to php, to zauważ, że on CAŁY jest jednym wielkim analizatorem składni.