Wykład 2 (Analiza leksykalna)
Pełen tekst
(2) Etapy pracy kompilatora • Character stream • [Lexical Analyzer] • token stream . • [Syntax Analyzer] • syntax tree . • [SemanFc Analyzer] • syntax tree . • [Intermediate Code Generator] • intermediate representaFon . • [Machine-‐Independent Code OpFmizer] • intermediate representaFon . • [Code Generator] . • target-‐machine code . • [Machine-‐Dependent Code OpFmizer] • target-‐machine code . 26.02.2014 . JIP-‐2 . 2 .
(3) Analizator leksykalny (AL), skaner • Skaner – pierwsza składowa kompilatora, która sprawdza czy można podzielić ciąg symboli wejściowych (program źródłowy) na jednostki leksykalne danego języka programowania, a więc na tzw. tokeny. • Skaner nie zwraca uwagi na ‘śmieci’, typy, kolejność tokenów, niezadeklarowane nazwy, itd. Te zadania należą do analizatora składni • Skaner nie ma pojęcia o grupowaniu i organizacji tokenów ... 26.02.2014 . JIP-‐2 . 3 .
(4) AL • Tokeny są to klasy leksemów, a więc podstawowych elementów języka programowania. Np. – stałe (int, double, char, string, itd) – operatory (arytmetyczne, logiczne, relacyjne) – znaki przestankowe – słowa kluczowe języka . 26.02.2014 . JIP-‐2 . 4 .
(5) Schemat skanera while (i > 0)! i = i – 1;! wejście: program źródłowy . Analizator leksykalny . Błędy Analizator rozpoznaje poszczególne elementy tokenów: 7 lub 2345 – stałe całkowite „jan” lub „lubliN” -‐-‐ łańcuchy siedem lub abc – zmienne Elementy te noszą nazwę leksemów i należą do różnych klas tokenów (znaczników). 26.02.2014 . JIP-‐2 . wyjście . while ( i > 0 ) i = i -‐ 1 ; . 5 .
(6) Budowa skanera • Dwie metody realizacji . – wprost (skaner ad hoc) – wykorzystanie wyrażeń regularnych i automatów skończonych . • Ad hoc: program oparty na pętli (loop) i przełącznikach (switch) – loop&switch – należy podać definicje tokenów – czytać wejście z lewa na prawo – analizować i jeśli OK wówczas – wykonać odpowiedni skok w programie – Metoda uciążliwa! . 26.02.2014 . JIP-‐2 . 6 .
(7) Deterministyczny Automat Skończony • • • • . Przykład: przełącznik; dwa stany: początkowy, końcowy; funkcja przejścia. Zastosowania DAS: . naciśnij off. on. naciśnij . – Analiza obwodów cyfrowych – Analizator leksykograficzny (rozbija tekst na jednostki leksykograficzne) – Skanowanie tekstu w celu wyszukiwania konkretnych słow (wyszukiwarki sieciowe) – Weryfikacja systemów o skończonej liczbie stanów (transakcje elektroniczne w internecie) . 26.02.2014 . JIP-‐2 . 7 .
(8) DAS • Przykład: Wyszukiwanie, modelowanie łańcucha (słowa) else start e . l . s . e . • Ważną rolę w teorii automatów skończonych grają – Gramatyki (parser, przetwarzanie wyrażeń, E-‐>E+E stwierdza, że wyrażenie można otrzymać z dwu wyrażeń połączonych znakiem plus; gramatyki bezkontekstowe) – Wyrażenia regularne (wzorce danych tekstowych, reprezentujące łańcuchy; UNIX: [A-‐Z][a-‐z]*[ ][A-‐Z][a-‐z]*) . 26.02.2014 . JIP-‐2 . 8 .
(9) Podstawowe pojęcia • Alfabet: Σ – skończony, niepusty zbiór symboli • Σ = {0, 1} – alfabet binarny; • Σ = {a, b, …, z} – zbiór małych liter . • Łańcuch , słowo – skończony ciąg symboli wziętych z jakiegoś alfabetu • Łańcuch pusty – ε – słowo o zerowej długości (można wybrać z każdego alfabetu) • Długość słowa – liczba symboli niepustych • Potęgi alfabetu – Σk -‐-‐ zbiór słów o długości k nad alfabetem Σ • Σ0 = {ε}, Σ1 = {0, 1}, Σ2 = {0, 1, 00, 01, 10, 11}, … 26.02.2014 . JIP-‐2 . 9 .
(10) Podstawowe pojęcia • Konwencja – Małe litery z początku alfabetu łac.: a, b, c … -‐ symbole – Małe litery z końca alfabetu: w, x, y, z – słowa, łańcuchy . • Zbiór wszystkich łańcuchów nad Σ oznaczamy przez Σ* (* -‐ operator Kleene’go) – Σ* = Σ0 𝗨 Σ1 𝗨 Σ2 𝗨 … 26.02.2014 . JIP-‐2 . 10 .
(11) Język • Językiem nazywamy zbiór łańcuchów (słów) wybranych z pewnego alfabetu Σ (inaczej: jeśli Σ jest alfabetem i L⊆Σ* to L nazywamy językiem nad Σ) • Przykłady – język polski, angielski, C, C++, … – Języki abstrakcyjne . • Język ze słów złożonych z n zer i n jedynek {ε, 01, 0011, 000111, …} • Język ze słów złożonych z 0 i 1 zawierających tyle samo zer i jedynek {ε, 01, 0101, 1010, 0110, …} • Zbiór liczb pierwszych zapisanych w postaci binarnej {ε, 10, 11, 101, 111, 1011, …} • Σ* • ∅ -‐ zbiór pusty • {ε}; zauważmy, że ε ≠ ∅ . 26.02.2014 . JIP-‐2 . 11 .
(12) Problem • Dla danego w∈Σ* rozstrzygnąć czy w∈L(Σ) Przykład. Rozstrzygnięcie czy napis należy do języka liczb pierwszych Lp jest w ogólności trudnym problemem obliczeniowym Praca parsera! 26.02.2014 . JIP-‐2 . 12 .
(13) Definicja DAS • A = (Q, Σ, δ, q0, F) – A = nazwa DAS – Q = skończony zbiór stanów – Σ = zbiór symboli wejściowych – δ = funkcja przejścia (ze stanu do stanu) – q0= stan początkowy – F = zbiór stanów końcowych 26.02.2014 . JIP-‐2 . 13 .
(14) Definicja DAS • Notacja wygodniejsza – Diagram przejść – Tablica przejśc . • Przykład: DAS akceptujący łańcuchy zawierające podłańcuch 01 1 qq0 0. 26.02.2014 . qq2 0. 0 . JIP-‐2 . 1 . q q110 . 0,1 . 14 .
(15) DAS, funkcja przejścia • Funkcja przejścia dla DAS z poprzedniego przykładu; δ(stan, symbol_wejściowy) →stan; 0 . 1 . → q0 q2 . q0 . q1 . q1 . q2 q2 . q1 . *q 1. 1 qq00 . 0 . qq02 . 1 . qqq q0 11 0. 0,1 . (gwiazdka oznacza stany akceptujące) 26.02.2014 . JIP-‐2 . 15 .
(16) DAS i δ(stan,symbol) . 26.02.2014 . JIP-‐2 . 16 .
(17) Prosty automat A, B, C, ..., Z . start. stan . 26.02.2014 . ". ". przejście . JIP-‐2 . st. końcowy . 17 .
(18) Prosty automat A, B, C, ..., Z . start. ". ". ’’AUTOMAT’’ . 26.02.2014 . JIP-‐2 . 18 .
(19) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. (Przykład pożyczony z kursu cs143, Stanford) 26.02.2014 . JIP-‐2 . 19 .
(20) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 20 .
(21) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 21 .
(22) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 22 .
(23) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 23 .
(24) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 24 .
(25) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 25 .
(26) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 26 .
(27) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 27 .
(28) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 28 .
(29) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 29 .
(30) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 30 .
(31) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 31 .
(32) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 32 .
(33) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 33 .
(34) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 34 .
(35) A. złożony, NAS . 0 start. 1. 0. 0. 1. 0, 1 1. 0 1 1 1 0 1 26.02.2014 . JIP-‐2 . 35 .
(36) A. złożony, NAS 0. . start. 0. 0. 1. 0, 1 1. Ponieważ automat znalazł się w jednym ze stanów końcowych, więc słowo zostało zaakceptowane 26.02.2014 . 1. 0 1 1 1 0 1 JIP-‐2 . 36 .
(37) Rozszerzenie δ • Podstawa. δ(q, ε) = q • Krok indukcyjny. Jeśli w=xa, to δ(q,w) = δ(δ(q,x),a) Aby obliczyć δ(q,w) obliczamy najpierw δ(q,x) – czyli stan, w którym znajdzie się automat po przetworzeniu wszystkich symboli w poza ostatnim. Przypuśćmy, że stanem tym jest p. Wtedy dokonując przejścia ze stanu p na wejściu a, a więc ostatnim symbolu w, otrzymamy δ(q,w), a zatem δ(q,w) =δ(p,a) 26.02.2014 . JIP-‐2 . 37 .
(38) Przykład DAS . 1. Start. • L={w | w ma parzystą liczbę zer i parzystą liczbę jedynek} • Zadaniem DAS jest więc liczenie zer i jedynek modulo 2 26.02.2014 . JIP-‐2 . q0. 1. q1. 0. 0. 0. 0. q2. q3. 1. 0 . 1 . →*q0 . q2 . q1 . q1 . q3 . q0 . q2 . q0 . q3 . q3 . q1 . q2 38 .
(39) Język DAS • Język DAS A=(Q, Σ, δ, q0, F) oznaczamy przez L(A) i definiujemy następująco: L(A) = {w | δ(q0,w) ∈F} • Język DAS A, L(A), to zbiór słów w przeprowadzających stan początkowy automatu q0 w jeden ze stanów akceptujących (końcowych) F. • Jeśli L=L(A) dla pewnego A to L nazywamy językiem regularnym. 26.02.2014 . JIP-‐2 . 39 .
(40) Wyrażenia regularne (RE) • Definicja: RE = wyrażenie regularne (regular expression, regex) . – RE są to reguły definiujące słowa lub zbiory słów (łańcuchów) należących do języka formalnego Σ*. . • Reguły składania dla x i y należących do reg: • konkatenacja (złożenie): xy • alternatywa: x|y lub x+y; czytaj x lub y • powtarzanie: x*, x powtórzone zero lub więcej razy . • RE . – każdy symbol alfabetu Σ – ε, pusty łańcuch – jeśli r i p są RE to również (r), rp, r|p, r* są RE – nic poza tym nie jest RE . 26.02.2014 . JIP-‐2 . 40 .
(41) Priorytet operatorów RE • Priorytet = kolejność (R) R* R1R2 R1|R2 lub R1 + R2 • Przykład: ab*c|d należy interpretować jako ((a(b*))c)|d 26.02.2014 . JIP-‐2 . 41 .
(42) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera 00 jako podłańcuch (0 | 1)*00(0 | 1)* . 26.02.2014 . JIP-‐2 . 42 .
(43) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera 00 jako podłańcuch (0 | 1)*00(0 | 1)* 110011 0000 01111011100111 26.02.2014 . JIP-‐2 . 43 .
(44) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera tylko trzy symbole (0|1)(0|1)(0|1) 011 110 111 26.02.2014 . JIP-‐2 . 44 .
(45) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera tylko trzy symbole (0|1){3} 011 110 111 26.02.2014 . JIP-‐2 . 45 .
(46) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera przynajmniej jedno 0 1*00*1* 0111 11011 111011 26.02.2014 . JIP-‐2 . 46 .
(47) Przykłady prostych RE • Σ={0,1} – alfabet • Łańcuch, który zawiera jedno 0 1*0?1* 0111 11011 111011 26.02.2014 . JIP-‐2 . 47 .
(48) Zastosowania RE • Σ={a, @, .}, gdzie a=dowolna litera • Adresy e-‐mail aa* (.aa*)* @ aa*.aa* (.aa*)* . 26.02.2014 . JIP-‐2 . 48 .
(49) Zastosowania RE • Σ={a, @, .}, gdzie a=dowolna litera • Adresy e-‐mail aa* (.aa*)* @ aa*.aa* (.aa*)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl . 26.02.2014 . JIP-‐2 . 49 .
(50) Zastosowania RE • Σ={a, @, .}, gdzie a=dowolna litera • Adresy e-‐mail aa* (.aa*)* @ aa*.aa* (.aa*)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl . 26.02.2014 . JIP-‐2 . 50 .
(51) Zastosowania RE • Σ={a, @, .}, gdzie a=dowolna litera • Adresy e-‐mail a+ (.a+)* @ a+.a+(.a+)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl . 26.02.2014 . JIP-‐2 . 51 .
(52) Zastosowania RE • Σ={a, @, .}, gdzie a=dowolna litera • Adresy e-‐mail a+ (.a+)* @ a+ (.a+)+ piotr@gmail.com piotr.kowalski@umcs.lublin.pl . 26.02.2014 . JIP-‐2 . 52 .
(53) Zastosowania RE • Σ={+, -‐, 0,...,9} • Liczby nieparzyste ze znakiem (+|-‐)?(0|1|2|3|4|5|6|7|8|9)*(1|3|5|7|9) -‐121 1157 +111115 26.02.2014 . JIP-‐2 . 53 .
(54) Zastosowania RE • Σ={+, -‐, 0,...,9} • Liczby nieparzyste ze znakiem (+|-‐)?[0123456789]*[13579] -‐121 1157 +111115 26.02.2014 . JIP-‐2 . 54 .
(55) Zastosowania RE • Σ={+, -‐, 0,...,9} • Liczby nieparzyste ze znakiem (+|-‐)?[0-‐9]*[13579] -‐121 1157 +111115 26.02.2014 . JIP-‐2 . 55 .
(56) Zastosowania RE • Przykład. Σ ={a,b} – alfabet • łańcuchy zawierające tylko nieparzystą liczbę a: a(aa)* • łańcuchy zawierające aa: b*(aa)*b* . – RE [0-‐9]* realizuje następujący DAS skończony pokazany poniżej . 26.02.2014 . JIP-‐2 . 56 .
(57) Zastosowania RE • Zadanie: Podać RE, które realizuje automat skończony pokazany poniżej . 26.02.2014 . JIP-‐2 . 57 .
(58) Inne automaty skończone • NAS = niedeterministyczny automat skończony; może znaleźć się jednocześnie w wielu stanach wyjściowych • ε-‐NAS = NAS reagujący na słowa puste – Przykład. ε-‐NAS akceptujący liczby dziesiętne postaci: • opcjonalny znak + lub -‐ • ciąg cyfr 0, 1, ..., 9 • kropka Start. • ciąg cyfr q0 ε,+,- q1 .. Liczba=(ewZnakCyfryKropkaCyfry) . 0, 1, ..., 9 . q2. 0,1,...,9. ε. q5. .. q4. • NAS ze stosem • inne . 26.02.2014 . 0,1,...,9. q3. JIP-‐2 . 58 .
(59) Równoważność NAS i RE . NAS akceptujący język RE (0|1)*(000|111)(01)* . 26.02.2014 . JIP-‐2 . 59 .
(60) Równoważność automatów i RE ε-NFA. NFA. RE. DFA. (Hopcro‡ i in.) . 26.02.2014 . JIP-‐2 . 60 .
(61) Reguły McNaughtona-‐Yamady-‐Thompsona 1. Ten NFA akceptuje jeden wybrany symbol alfabetu . 2. Ten NFA akceptuje tylko ε ε. R. ε. S. 3. Ten ε-‐NFA akceptuje r|s . 4. Ten ε-‐NFA akceptuje rs . ε. R. ε ε. S. ε. 5. Ten ε-‐NFA akceptuje r* . ε. R. ε. ε 26.02.2014 . JIP-‐2 . 61 .
(62) Od RE do DAS • Używając podanych reguł (McNaughton-‐ Yamada-‐Thompson; patrz: Aho+) możemy zbudować NAS z danych RE, następnie przekształcić NFA w DAS. Alfabet jest cały czas ten sam. Języki RE i tak zbudowanego DAS są identyczne (Jak to zrobić dokładnie? Patrz np. Aho+ lub HopcroM+) . 26.02.2014 . JIP-‐2 . 62 .
(63) Zadanie • Pokaż, że NAS pokazany obok (ß) można zastąpić przez DAS pokazany obok, poniżej. • Zapisz RE dla otrzymanego DAS . 26.02.2014 . JIP-‐2 . 63 .
(64) Przykład Zamiana wyrażenia regularnego ( 0|1 ) *1 ( 0|1 ) na DAS z wykorzystaniem reguł Thompsona. . . ε. ε. 0. 1. ε. ε. (a). ε. ε. . ε. ε. 0. 1. ε ε. ε. ε. (b). Star t. ε. ε. ε. ε. 1. 0. 1. ε. ε ε. ε. ε. ε. ε. ε. 0. 1. ε. ε. (c). 26.02.2014 . JIP-‐2 . 64 .
(65) Wyrażenia regularne UNIXa • UNIX . . – dowolny znak * -‐ dowolna liczba wystąpień ^ -‐ początek wiersza $ -‐ koniec wiersza \ -‐ znosi znaczenie specjalne; zwykły znak [abc] – któryś ze znaków wypisanych \(...\) – zapamiętywanie ciągu w buforze \<, \> początek, koniec słowa . • Standard POSIX . – klasy znaków w nawiasach [: :] . [:alnum:], [:alpha:], [:blank:], [:cntrl:], [:digit:], [:graph:] – drukowalne [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:] . 26.02.2014 . JIP-‐2 . 65 .
(66) lex, flex – generator skanerów • Proces przejścia od RE do automatów (pokazany krótko powyżej) jest wykorzystywany przez narzędzie lex lub flex, służące do budowania skanerów – programów do analizy leksykalnej innych programów, napisanych w jakimś języku, np. C++ lub Java. • flex pobiera ciąg wyrażeń regularnych, opisujących dany język, buduje automat skończony oraz program w języku C służący jako analizator leksykalny programów ... 26.02.2014 . JIP-‐2 . 66 .
(67) Przykład języka programowania • . Fortran (pierwszy, prymitywny język wyższego poziomu) . – zmienne: dł. 5 znaków, pierwszy znak litera; duże litery. Zmienne o nazwach zaczynających się na i, j, k, l, m, n mają domyślnie typ całkowity, inne rzeczywisty; – Nie potrzeba deklarować zmiennych z wyjątkiem tablic. Tablice mogą być co najwyżej 3 wymiarowe. – Instrukcja podstawienia z lewej strony zawiera zmienną, z prawej wyrażenie – Struktury kontrolne . • bezwzględny skok: GOTO <numer instrukcji> • skok obliczany: GOTO (20,30,40,50) I -‐-‐ I może mieć wartość 1, 2, 3 ,4 – skok do instrukcji o numerze 20, 30, 40 lub 50 • IF (A+B-C/2) 10, 12, 14 -‐-‐ skok do 10, 12, 14 w zależności od wartości w=A+B+C/2: w<0 -‐> 10, w=0 -‐> 12, w>0 -‐> 14 • Instrukcja DO: DO 21 K=1, N, 2 wykonuje się do instrukcji z numerem 21 łącznie; K zmienia się co 2 od 1 do N. . – Brak podprogramów definiowanych przez użytkownika – Ignorowane są odstępy; np. DIMENSIONDANE(1234) lub D I M E N S I O N D A N E (1234) lub ładniej DIMENSION DANE(1234) -‐-‐ deklaracja tablicy o długości 1234 – Słów kluczowych można używać jako nazw np. IF = 10 lub DIMENSION DO(2)! • . Zadanie. NAPISZ schemat skaneraJ Pierwsze skanery to skanery ad hoc. Tutaj nawet RE, czy automaty skończone mają problem. . 26.02.2014 . JIP-‐2 . 67 .
(68) Literatura • A. Aho, R. Sethi, J. Ullman, Compilers: Principles, Techniques, and Tools. Reading, MA: Addison-‐Wesley, 1986; jest wydanie polskie. • J. Hopcro‡, J. Ullman, IntroducFon to Automata Theory, Languages, and ComputaFon, Reading MA: Addison-‐Wesley, 1979; jest wydanie polskie.. . 26.02.2014 . JIP-‐2 . 68 .
(69) Co dalej? • Character stream • [Lexical Analyzer] • token stream . • [Syntax Analyzer] • syntax tree . • [SemanFc Analyzer] • syntax tree . • [Intermediate Code Generator] • intermediate representaFon . • [Machine-‐Independent Code OpFmizer] • intermediate representaFon . • [Code Generator] . • target-‐machine code . • [Machine-‐Dependent Code OpFmizer] • target-‐machine code . 26.02.2014 . JIP-‐2 . 69 .
(70)
Powiązane dokumenty
Ciągnie się od morenowego jeziora Mamry na północy do rynnowego jeziora Nidzkiego i jeziora Roś na południu.. Oprócz głównych jezior do szlaku żeglownego należą też
W obrębie budowli oraz w jej bezpośrednim sąsiedztwie odkryto 11 dołków posłupowych, których przeznacze- nia nie udało się jednoznacznie zinterpretować — część z nich
Wyszukiwanie za pomocą formularza wyszukiwania zaawansowanego Panel podstawowy Możliwość przeszukania danej kategorii dokumentu.... Wyszukiwanie za pomocą formularza
Thus, neither the divergent fiscal treatment nor the price levels over the past decades can explain the fact that, since 2010, the development of house prices in the Netherlands
By using prototypes as a physical interface for the digital model, the different sub-problems become an integrated part of the digital design process.. By a reflective process
W drugim etapie dialogu skoncentrowano się na tematyce rozumienia relacji wiary do sakramentów i jedności Kościoła.. W trze ciej fazie dialogu zajęto się psychologią
kant van dierenvoeders. Helaas is het dossier van dit pro- ject zoekgeraakt en resteren slechts de hier afgebeelde presentatietekeningen en maquettefoto. Hier vindt de
Portal frame, two degrees offreedom (fig.. For the framed structure shown in fig. 8 determine the upper and the lower bound for the critical load factor. The