[ Pobierz całość w formacie PDF ]
.Można nastÄ™pnie użyć tej wartoÅ›ci wyrażenia w wyÅ›wietlanym komunikacie sygnalizujÄ…cym przypisanie, jeżeli tylko o to zadbamy.Aby takie zadanie wykonać, musimy być pewni, że wszystkie alternatywy w regule opisujÄ…cej to wyrażenie bÄ™dÄ… zwracaÅ‚y wartość liczbowÄ….W naszym przypadku jest to speÅ‚nione.Do oznaczenia zwracanej wartoÅ›ci struktury niezakoÅ„czonej używamy skrótu $$ (bÄ™dzie to w tym konkretnym wypadku expression).Do wartoÅ›ci podwyrażeÅ„ w wyrażeniach zÅ‚ożonych odnosimy siÄ™ tak jak poprzednio — za pomocÄ… skrótów $1 i $3.W tym prostym przykÅ‚adzie dla identyfikatorów zwracana jest wartość zerowa.W peÅ‚nej aplikacji można by wyszukiwać wartość zmiennej w tablicy symboli.Można także przechować wartość elementu e, jeÅ›li stwierdzimy, że ma ona być użyta w instrukcji przypisania.W niektórych przypadkach może być potrzebna wartość struktury niezakoÅ„czonej, której typ nie należy do grupy typów używanych dla elementów.Jako przykÅ‚ad można podać budowÄ™ struktury danych odpowiadajÄ…cej strukturze wejÅ›ciowej, a nastÄ™pnie przetwarzanie otrzymanej struktury jako caÅ‚oÅ›ci (a nie stopniowe budowanie wyniku).Taka sytuacja może wystÄ…pić przy tworzeniu aplikacji kalkulatora.Można tak postÄ…pić, ale należy dodać inny typ do deklaracji %union i zadeklarować, że nasza struktura niezakoÅ„czona bÄ™dzie mieć taki typ.ZakoÅ„czmy nasz przykÅ‚ad rozbioru programu w jÄ™zyku Pascal, tworzÄ…c drzewo skÅ‚adni (wewnÄ™trznÄ… strukturÄ™ danych) i wyÅ›wietlajÄ…c je po odczytaniu peÅ‚nej instrukcji.BÄ™dzie to struktura klasycznego, abstrakcyjnego typu danych, czyli drzewo binarne.StrukturÄ™ takÄ… tworzÄ… wÄ™zÅ‚y.Każdy wÄ™zeÅ‚ jest okreÅ›lonego typu i ma dwa rozgaÅ‚Ä™zienia reprezentujÄ…ce poddrzewa.Kilka pokazanych niżej przykÅ‚adów wyjaÅ›ni to lepiej.Wyrażenie fred - 7 > 34 bÄ™dzie wiÄ™c reprezentowane jako:Instrukcja przypisania bÄ™dzie zawierać wÄ™zeÅ‚ typu t_assign i dwa rozgaÅ‚Ä™zienia.Jedno z nich jest identyfikatorem, a drugie przypisanym wyrażeniem.Instrukcja if-then-else bÄ™dzie siÄ™ skÅ‚adać z dwóch wÄ™złów:Część {else} bÄ™dzie równa NULL, jeżeli w instrukcji nie wystÄ™puje sÅ‚owo else.A oto kod tree.h, definiujÄ…cy interfejs dla naszych funkcji tworzÄ…cych drzewo:/* tree.h - definicje drzewa skÅ‚adni *//* Tree types */typedef enum {t_block, /* Dla bloku instrukcji */t_join, /* Dla instrukcji wewnÄ…trz bloku */t_if, /* Dla instrukcji if */t_else, /* Dla instrukcji zawartych w częściach else */t_assign,/* Dla przypisaÅ„ */t_op, /* Dla wyrażeÅ„ z operatorem */t_num, /* Dla liczb */t_id, /* Dla identyfikatorów */} treetype;typedef struct t {treetype type;int op;union {int numval;char *idval;} value;struct t *left;struct t *right;} tree;tree *mknum(int);tree *mkid(char *);tree *mknode(treetype, int, tree *, tree *);A oto kod tree.c, zawierajÄ…ce funkcje sÅ‚użące do tworzenia wÄ™złów z innych wÄ™złów i symboli koÅ„cowych (takich jak liczby i identyfikatory):/* Definicje funkcji drzewa */#include <stdio.h>#include <stdlib.h>#include "tree.h"tree *mkdir(char *id){tree *t = mknode(t_id, 0, NULL, NULL);t -> value.idval = id;return t;}tree *mknum(int num){tree *t = mknode(t_num, 0, NULL, NULL);t -> value.numval = num;return t;}tree *mknode(treetype, int op, tree *l, tree * r){tree *t = malloc(sizeof(tree));t -> type = type;t -> op = op;t -> left = l;t -> right = r;return t;}print_tree(tree *t){/* BÄ™dzie zdefiniowane później */}Aby skrócić powyższy przykÅ‚ad, pominiÄ™to w nim sprawdzanie bÅ‚Ä™dów i funkcje uwalniania pamiÄ™ci używanej przez struktury wÄ™złów
[ Pobierz całość w formacie PDF ]
Tematy
IndexZelazny Roger Amber 07 Krew Amber
John DeChancie Castle 07 Castle Spellbound
Fred Saberhagen Berserker 07 Berserker Blue Death
Clancy Tom Jack Ryan 07 Suma wszystkich strachów tom 1
Fred Saberhagen Berserker 10 Berserker Throne
Butcher Jim Akta Harry'ego Dresdena 07 Martwy Rewir.NSB
07. Robert Jordan Koło Czasu t4 cz1 Wschodzšcy Cień
Makuszynski Kornel PiÄ…te przez dziesiÄ…te
Chris England The Fun Factory (v5.0) (epub) i
Kraszewski Józef Ignacy Dzieje Polski 01 Stara BaÂśń (1876)