Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa]Parser wyrażeń matematycznych
shinuexx
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 9
Dołączył: 2.02.2011
Skąd: undefined

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


Zrobiłem dla własnych potrzeb parser wyrażeń matematycznych (na razie niezbyt skomplikowanych), którym posługuję się w swoim ggbocie. Można deklarować w nim własne zmienne i operować na nich wedle potrzeb. Obsługuje także podstawowe jednoargumentowe (jak na razie) funkcje matematyczne. Są to moje początki w tworzeniu klas, więc proszę o wyrozumiałość. W razie jakiś pytań bądź błędów proszę pisać, będę w miarę możliwości odpisywał.

mexp class

Sposób użycia:
  1. // 1
  2. $t=new mexp("pi^pi");
  3. $r=$t->result();
  4. // 2
  5. $t=new mexp("a+b*c",array("a"=>10,"b"=>2,"c"=>sin(10)));
  6. $r=$t->result();
  7. // 3 blad skladniowy
  8. $t=new mexp("(34-(312+(9*(-1)$)))");
  9. $r=$t->result();

Wynik:
Kod
//1
r=36.462159607208;
//2
r=8.9119577782213;
//3
r=false;
($t->display_error())
(34-(312+(9*(-1)$)))
                |  
SYNTAX ERROR: Invalid operator '$' at position '17'


DODANO:
A za wcześnie się mnie zapisz wcisnęło i po chwili wyedytowałem:)

Ten post edytował shinuexx 30.12.2011, 19:36:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Po 1. Brakuje mi method chaining

Po 2. np. to
  1. private function str2array($str){
  2. $out=array();
  3. for($x=0;$x<strlen($str);$x++)
  4. $out[]=substr($str,$x,1);
  5. return $out;
  6. }


str_split

Cytat
* @return boolean/number $result - wynik wyrażenia, w przypadku niepowodzenia 'false'

Nie, nie ucz się takiego zwracania. Ma zwrócić wynik lub rzucić błędem/wyjątkiem (zależnie od sytuacji)

Cytat
* mexp::count() - obliczenie wartosci wyrazenia w formacie RPN

W php jest funkcja count więc nie używaj tej nazwy.

  1. private function factorial($n){
  2. if($n==0||$n==1)
  3. return 1;
  4. return $n*self::factorial($n-1);
  5. }

Przecież factorial nie jest statyczną metodą.

Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 27.12.2025 - 18:27