Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kod źródłowy PHP, chyba ext/standard/math.c
Zigi
post 28.12.2004, 20:05:12
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 20.11.2004

Ostrzeżenie: (0%)
-----


Pytanie odtyczy kodu źródłowego php.
Czy moze mi ktoś napisać jakie funkcje są wykorzystywane w czasie wykonywania skryptu mniej wiecej takiego:

  1. <?php
  2.  
  3. echo &#092;"(3+3*4)/(4*43-476);
  4.  
  5. ?>


wydaje mi się że w celu wykonania takeigo kodu jest wykorzystywany taki plik jaki dałem w opisie czyli ext/standard/math.c, ale tam są funkcje na funkcje trygonometryczne i podobne.
Czy ktoś mi pomoże?
Go to the top of the page
+Quote Post
netzah
post 30.12.2004, 08:27:20
Post #2





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


Nie jest to math.c na pewno - w tym pliku definiowane sa takie funkcje jak sin, cos, itp.
Za dzialania mat. odpowiedzialny jest plik zend/zend_operators.c
Go to the top of the page
+Quote Post
Zigi
post 2.01.2005, 18:07:48
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 20.11.2004

Ostrzeżenie: (0%)
-----


Plik, który podał netzah jest dobry, ale go praktycznie nie rozumiem. Moze ktoś ma/zna kody źródłowe prostego kalkulatora który robiłby np. takie zadania (3+3*4)/(4*43-476) smile.gif.
Nie proszę o kody źródłowe Windowsowego kalkulatora biggrin.gif
Go to the top of the page
+Quote Post
Jabol
post 2.01.2005, 19:04:19
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Zigi
post 2.01.2005, 21:02:37
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 20.11.2004

Ostrzeżenie: (0%)
-----


Właśnie robie i mi nie wychodzi zrobienie takiego kalkulatora który rozbijał by wszystko na części a następnie to wykonywał wszystko po kolei. Po to był (i nadal jest) mi potrzebny odpowiedni kod źródłowy php (nie koniecznie nawet php).
Po kodach, do których mnie odsyłacie widzę, że robilem to zupełnie inaczej ale myśle że nie tak kompletnie źle.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 15:47