záhlaví

Autor: Jan Dohnal
Škola: ČVUT FEL
Semestr: 9. (2006/2007)
Předmět: X36PJP - Programovací jazyky a překladače

obsah

zadání

Předmětem semestrální práce by měl být modul pro výpočet spolehlivostních charakteristik pro elektronický katalog intenzit poruch prvků letadlových soustav. Tento katalog obsahuje informace o intenzitách poruch, střední délce života a další údaje o více než 500 prvcích devíti letadlových soustav malého dopravního letadla.

Od výpočetního modulu očekáváme následující funkce:

Postup řešení: Vytvořit nástroj, který převede zadání formulované specifickým jazykem (viz dále) do vnitřní formy s následným výpočtem včetně možnosti vykreslení grafů spolehlivostních charakteristik (doby do poruchy, funkce přežití).

Sériový systém prvků. Předpokládejme, že prvky A a B jsou zapojeny do série, prvek A má intenzitu poruchy λA, prvek B má intenzitu poruchy λB. Za předpokladu, že doby do poruchy každého z obou prvků jsou nezávislé, s distribučními funkcemi FA(t), resp. FB(t), bude distribuční funkce doby do poruchy sériového systému

a funkce přežití
Pokud jsou rozdělení doby do poruchy obou prvků exponenciální, je

Paralelní systém prvků: Předpokládejme, že prvky C a D jsou zapojeny paralelně, prvek C má intenzitu poruchy λC, prvek D má intenzitu poruchy λD. Za předpokladu, že doby do poruchy každého z obou prvků jsou nezávislé, s distribučními funkcemi FC(t), resp. FD(t), bude distribuční funkce doby do poruchy paralelního systému

a funkce přežití

Pokud jsou rozdělení doby do poruchy obou prvků exponenciální, je

Sériově-paralelní systém: Program umožní „skládat“ prvky do sériově-paralelních struktur. Prvky by mělo být možné postupně přidávat k již vybrané skupině prvků nebo k jednotlivým vybraným prvkům. Při výběru uživatel stanoví způsob připojení: sériově nebo paralelně. Tímto způsobem bude možno vytvářet poměrně složité struktury. Modul by měl vytvořenou strukturu zobrazit ve formě schématu podobného níže uvedenému obrázku a poskytnout uživateli možnost editace již vytvořené struktury (odebrání/přidání prvku, změnu paralelního zapojení na sériové a opačně a podobně)

Literatura: Podrobnosti lze nalézt v kapitole 4 (Network modelling and evaluation of simple systems) v knize Billinton R., Allan R. N.: Reliability Evaluation of engineering systems. Plenum Publ. Co., New York, 1992.

stručný popis řešení

Pro naprogramování jsem využil skriptovacího jazyka PHP ver.5. Rozdělil jsem program do čtyř částí:

Program umí počítat pro proměnné v souvislém rozsahu, dosazovat do konstant výrazy. Do budoucna bych ho chtěl ještě rozšířit o kreslení grafů a nákresů rozložení statistických funkcí.

Gramatiku lze rozšířit o další prvky. Např. logaritmy, derivace, goniometrické funkce.

gramatika

terminální symboly (přijímaná abecda): {a..z}, {0..9}, +, -, *, /, (, ), $, &, ^, ;, ,, ., =
neterminální symboly: GLOBAL, DEFINICE, KONST, VYRAZ, VYRAZ2, LAMBDA, LAMBDA2, CISLO, DCISLO, CCISLO, NCISLO, CISLICE
pravidla:
  1. GLOBAL:=[VYRAZ][DEFINICE]
  2. DEFINICE:=;[KONST]=[VYRAZ][DEFINICE]
  3. DEFINICE:=ε
  4. KONST:={a,b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,s,u,v,w}
  5. KONST:=e
  6. VYRAZ:=[VYRAZ][VYRAZ2]
  7. VYRAZ:=([VYRAZ])
  8. VYRAZ:=-[VYRAZ]
  9. VYRAZ:={x,y,z,t}
  10. VYRAZ:=[CCISLO][DCISLO]
  11. VYRAZ:=[KONST]
  12. VYRAZ:=[LAMBDA]
  13. VYRAZ2:=-[VYRAZ]
  14. VYRAZ2:=+[VYRAZ]
  15. VYRAZ2:=/[VYRAZ]
  16. VYRAZ2:=*[VYRAZ]
  17. VYRAZ2:=^[VYRAZ]
  18. LAMBDA:=([LAMBDA])
  19. LAMBDA:=R([VYRAZ])[LAMBDA2]
  20. LAMBDA2:=$[LAMBDA]
  21. LAMBDA2:=&[LAMBDA]
  22. LAMBDA2:=ε
  23. DCISLO:=.[NCISLO]
  24. DCISLO:=,[NCISLO]
  25. DCISLO:=ε
  26. CCISLO:=[CISLICE][NCISLO]
  27. CCISLO:=0
  28. NCISLO:=[CCISLO]
  29. NCISLO:=0[NCISLO]
  30. NCISLO:=ε
  31. CISLICE:={1,2,3,4,5,6,7,8,9}
priority binarních operací: &,$,^,*,/,+,-
tabulka FIRSTxFOLLOW:
pravidla FIRSTFOLLOW
GLOBAL:=[VYRAZ][DEFINICE] (,-,x,y,z,t,R,1,2,3,4,5,6,7,8,9,0,
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,u,v,w
ε
DEFINICE:=;[KONST]=[VYRAZ][DEFINICE] ; ε
DEFINICE:=ε ε
KONST:={a,b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,s,u,v,w} a,b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,r,s,u,v,w ),+,-,*,/,^,;
KONST:=e e
VYRAZ:=[VYRAZ][VYRAZ2] (,-,x,y,z,t,R,1,2,3,4,5,6,7,8,9,0,
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,u,v,w
),+,-,*,/,^,;
VYRAZ:=([VYRAZ]) (
VYRAZ:=-[VYRAZ] -
VYRAZ:={x,y,z,t} x,y,z,t
VYRAZ:=[CCISLO][DCISLO] 1,2,3,4,5,6,7,8,9,0
VYRAZ:=[KONST] a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,u,v,w
VYRAZ:=[LAMBDA] (,L
VYRAZ2:=-[VYRAZ] - ),+,-,*,/,^,;
VYRAZ2:=+[VYRAZ] +
VYRAZ2:=/[VYRAZ] /
VYRAZ2:=*[VYRAZ] *
VYRAZ2:=^[VYRAZ] ^
LAMBDA:=([LAMBDA]) ( ),+,-,*,/,^,;
LAMBDA:=R([VYRAZ])[LAMBDA2] R
LAMBDA2:=$[LAMBDA] $ ),+,-,*,/,^,;
LAMBDA2:=&[LAMBDA] &
LAMBDA2:=ε ε
DCISLO:=.[NCISLO] . ),+,-,*,/,^,;
DCISLO:=,[NCISLO] ,
DCISLO:=ε ε
CCISLO:=[CISLICE][NCISLO] 1,2,3,4,5,6,7,8,9 ),+,-,*,/,^,;,,,.
CCISLO:=0 0
NCISLO:=[CCISLO] 1,2,3,4,5,6,7,8,9,0),+,-,*,/,^,;,,,.
NCISLO:=0[NCISLO] 1,2,3,4,5,6,7,8,9,0
NCISLO:=ε ε
CISLICE:={1,2,3,4,5,6,7,8,9} 1,2,3,4,5,6,7,8,9 ),+,-,*,/,^,;,,,.,
1,2,3,4,5,6,7,8,9,0
rozkladová tabulka:
neterm (-{x,y,z,t}R{1..9}0{a..w}`e`R`te)+*/^;,.ε$&
GLOBAL 111 11 11 1xxxxxxxxxxx
DEFINICExxx xx xx xxxxxx2xx3xx
KONST xxx xx x4 5xxxxxxxxxxx
VYRAZ 6,7,1089 1011 1112 12xxxxxxxxxxx
VYRAZ2 x15x xx xx x131416171813xx13xx
LAMBDA 19xx 20x xx xxxxxxxxxxxx
LAMBDA2 x23x xx xx x232323232323xxx2122
DCISLO x26x xx xx x2626262626262524xxx
CCISLO xxx x27 28x xxxxxxxxxxxx
NCISLO x32x x31 30x x3232323232323232xxx
CISLICE xxx x33 xx xxxxxxxxxxxx

závěr

Na semestrální práci jsem si osvěžil znalost automatů a lexikálních analyzátorů. Zároveň má semestrální práce i své praktické využití.