1. Trang chủ
  2. » Công Nghệ Thông Tin

LT3 ch3 VanPhamODX

13 209 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 583,42 KB

Nội dung

Ch ng V n ph m và ôtômat đ y xu ng  Khá Khái ni m ngôn ng l p trì trình (NNLT) (NNLT)  V n ph m Lý thuy t tí ính toá án ttính to toán (Theory (Theory of of Computation) Computation) PGS.TS Phan Huy Khá Khánh  Khá Khái ni m v n ph m  Phân c p cá lo i v n ph m c a Chomsky  V n ph m chí qui  Ôtômat đ y xu ng khanhph@vnn.vn Ch ng V n ph m v ôtômat đ y xu ng  Ngôn ng phi ng c nh  Quan h v i cá ôtômat đ y xu ng Tính ch t c a cá ngôn ng phi ng c nh  2/77 2/ 77 S đ i c a h p ng L ch s ngôn ng l p trì trình  T má máy tí tính n t xu t hi n, ng i ph i tì tìm cá cách l p trì trình, hay l p ch ng trì trình (Programming)    Nh ng ngôn ng đ u tiên ch t h p c a cá s (bit) 1, g i là ngôn ng máy (Machine Language) Ngôn ng máy ph thu c hoà hoàn toàn vào t ch c ph n c ng c a má máy, và r t s c p Vi c l p trì trình r t khó khó kh n, n, nh c nh n và d sai só sót  T nh ng n m 1950, đ gi m nh vi c l p trì trình :    Ngôn ng h p d ch đ i t nh ng n m 1950 :    Các ch ng trì trình vi t b ng Assembly :  Không th ch y đ c mà mà ph i qua giai đo n h p d ch (Assembler) thành ngôn ng máy Ph thu c vào ph n c ng  Xa l v i ngôn ng t nhiên (Natural language)  Ng i ta s d ng k thu t g i ch ng trì trình (Subprogram hay Subroutine) b ng cá cách dùng l i nh ng ch ng trì trình vi t Ng i ta xây d ng cá th vi n (kho (kho ch ng trì trình m u) đ c n thì g i đ n G i t t h p ng (Assembly) (Assembly) hay đ c g i là ngôn ng bi u t ng (Symbolic Language) Trong h p ng , cá mã l nh và đ a ch toá toán h ng đ c thay th b i cá t ti ng Anh g i nh (Mnemonic) (Mnemonic) nh nh DIV, DIV, JUMP, MUL 3/77 3/ 77 4/77 4/ 77 Ngôn ng máy ti n g n đ n ngôn ng t nhiên Phá Phát tri n c a NNLT  N m 1957 :     Theo s phá phát tri n c l p trì trình c ng không ngà ngày cà đá đáp gi m nh công vi c l FORTRAN (FORmula TRANslator/ biên d ch cá công th c) đ c IBM đ x ng là m t nh ng NNLT đ u tiên FORTRAN g n g i ngôn ng t nhiên v i cá cách di n đ t Toá Toán h c cho phé phép gi i quy t cá bà toá toán khoa h c – k thu t và đ c ng d ng r t r ng rãi Ti p theo là s đ i c a cá NNLT nh :    a cá th h máy tí tính, cá ngôn ng ng ng đ c c i ti n và hoà hoàn thi n đ ng nhu c u c a ng i s d ng và p trì trình  Nhi u ngôn ng đ i và hình thành hai lo i ngôn ng : ALGOL 60 (ALGOrithmic Language) 1960, COBOL (Comon Business Oriented Language) 1964 Simula, v.v  Ngôn ng máy b c th p (low(low-level language)  H p ng  Ngôn ng l p trì trình b c cao  Các ngôn ng b c th p và h p ng , th th ng ch dùng đ vi t cá trì trình u n và ki m tra thi t b , trì trình s a l i (Debugger) 5/77 5/ 77 6/77 6/ 77 R t nhi u NNLT b c cao đ Ngôn ng l p trì trình b c cao  Các ngôn ng l p trì trình b c cao (High(High-level Language) :    c phá phát tri n M t vài NNLT quen thu c : Công c giú giúp gi i quy t cá v n đ th c t Là n i mà mà nh ng thành t u nghiên c u m i nh t c a Tin h c đ c đ a vào L nh v c nghiên c u phá phát tri n cá ngôn ng l p trì trình v a có có tính truy n th ng, v a có có tính hi n đ i  Lisp (LISt Processing) 1960 PL/1 (Programming Language number 1)  1963 Basic (Beginner’ (Beginner’s AllAll-Purpose Symbolic Instruction Code) 1964  Pascal (l y tên nhà nhà Toá Toán h c Phá Pháp Blaise PASCAL)  PROLOG (PROgramming in LOGic)  C 1972  ADA (l y tên nhà nhà n khoa h c Augusta Ada Byron) C++, Java, C#, Visual Basic    1970 1970 C s D li u, l p trì trình hà hàm, l p trì trình logic, h v.v 1980 ng đ i t ng, 7/77 7/ 77 Phân lo i NNLT theo ph  Có nhi u NNLT theo ph       8/77 8/ 77 ng th c nh ngh a m t NNLT b c cao ng th c :  M t NNLT b c cao đ c xây d ng mô ph ng (m t cá cách thô thi n) ngôn ng t nhiên, nhiên, th ng là ti ng Anh (ho c ti ng Nga), t b n y u t :  B ký t (Character Set)  B t v ng (Vocabulary)  Cú phá pháp (Semantic)  Ng ngh a (Semantic) M nh l nh (imperative) : Fortran (1957), Cobol (1959), Basic (1965), Pascal (1970), C (1971), Ada (1979) nh h ng đ i t ng (object(object-oriented) : Smalltalk (1969), C++ (1983), Eiffel (1986), Java (1991), C# (2000), Hàm (functional) : Lisp (1958), (1958), ML (1973), Scheme (1975), Caml (1987), Miranda (1982), Logic (logic(logic-based) ch y u là ngôn ng Prolog (1970) Ngôn ng thao tá tác c s d li u nh SQL (1980) X lý song song (parallel) : Ada, Occam (1982), CC-Linda, C n c vào cú cú phá pháp c a NNLT, ng i l p trì trình vi t ch ng trì trình g m cá câu l nh đ gi i quy t bà toá toán c a mì  M i câu l nh vi t không nh ng đú đ n v m t cú cú phá pháp, mà ph i đú đ n c v m t ng ngh a, hay ý ngh a logic c a câu l nh, đ gi i quy t bà toá toán   Ngoà Ngoài có có :     L L L L p trì trình phân b (Distributed Programming) p trì trình rà ràng bu c (Constraint Programming) p trì trình h ng truy c p (Access(Access-Oriented Programming) p trì trình theo lu ng d li u (Dataflow Programming), v.v  Ngoà Ngoài ra, có có y u t m t th n m là tính th c d ng (Pragmatic) 9/77 9/ 77 10/77 10/ 77 B t v ng B ký t  B t v ng (Vocabulary)  B ký t (Character Set)   G m m t t p h p h u h n cá ký t đ c phé phép dù dùng ngôn ng , th th ng là ký t ASCII Có th hi u b ký t có vai trò nh b ng ch (Alphabet) c a m t ngôn ng t nhiên  Ví d b né nét c b n dù dùng vi t ch Hán :   G m cá t (Word) (Word) hay đ n v t v ng (Token) dù dùng đ t o thành câu l nh và đ c phân lo i tu theo vai trò c a chúng NNLT M i lo i t v ng l i đ c chia thành cá cá c nhó nhóm nh h n tu theo ch c n ng s d ng  Ví d : Ch ng trình Pascal Program P; Var , y : Integer; Begin Read(x); y:=x+2; Write(y) End 11/77 11/ 77 Các đ n v t v ng - Tên, hay đ nh danh (Identifier) : Read, Write, P, x, y - H ng (Constants) : - Toán t (Operators) : + , := - D u phân cách (Delimiters) : :, (, ), Begin, End - T khoá/dành riêng (KeyWord) : Program, Var, If Then 12/77 12/ 77 Ví d v n ph m ti ng Anh Cú phá pháp  Cú phá pháp (Syntax) (Syntax) hay v n ph m (Grammar) t p h p cá quy t c cho phé phép :     Gi s câu ti ng Anh đ t c nh sau : Quy đ nh cá cách th c k t h p cá ký t thành t , k t h p cá t thành câu l nh đú (Statement - Instruction), k t h p câu l nh đú thành m t ch ng trì trình hoà hoàn ch nh Có th hình dung cá cách k t h p nà gi ng cá cách đ t câu m t ngôn ng t nhiên đ nh ngh a cú cú phá pháp m t ngôn ng l p trì trình, ng ng th ng s d ng : i ta  c xây d ng theo nh ng quy Câu (Phrase/Sentence) g m có có hai thành ph n l n l  Ch t (Subject)  ng t (Verbe)  Ch t có th He ho c She ng t có th sleep hay eat  T đó có th xây d ng đ  Ho c s đ cú phá pháp (Syntax Diagram)  Ho c d ng chu n BackusBackus-Naur (BNF (BNFBackusNaur Normal Form), hay d ng BackusBackus-Naur m r ng (EBNF (EBNFExtended BNF)   He sleep  He eat  She sleep She eat  t: c cá câu ki u S+V : 13/77 13/ 77 14/77 14/ 77 Ví d s đ cú phá pháp câu ti ng Anh Khá Khái ni m BNF  Trong ti ng Anh, m t câu đ n gi n g m thành ph n :   ng t (Verb), ch ng h n “like” like” “see” see”    BNF g m m t dãy cá quy t c, hay d ng th c Ch t (Subject), ch ng h n “I” “You” You”  B ng (Complement), ch ng h n “him” him” “her” her”   Dùng s đ cú phá pháp, ta có có : câu ch t ch ch tt đđ ng ng tt bb ng ng I You b ng đ ng t like  him  her  M i quy t c có có d ng : | < ng t > < B ng > ::= “I” | “You” You” < ng t > ::= “like” like” | “see” see” ::= “him” him” | “her” her”  Tên ngôn ng Pascal có có s đ cú phá pháp nh sau : SS Tên Ch Ch Ch Ch Ch  Ví d : tên ngôn ng Pascal : = { | } Ho c đ nh ngh a đ quy : = | | = ‘A’ | | ‘Z’ | ‘a’ | | ‘z’ = ‘0’ | | ‘9’ S A Z a z  Ví d tên vi t đú Pascal :  Delta, x1, x2, Read, v.v  Trá Trái l i, cá chu i ký t sau đ u không ph i là tên :  1A, 1A, , , bán kính, nh, v.v 17/77 17/ 77 18/77 18/ 77 L p trì trình theo cú cú phá pháp v n ph m Ví d m t NNLT đ n gi n M t câu, t c là m t ch  V n ph m c a m t NNLT đ n gi n d ng EBNF nh sau : ::= program * end ::= | đ ::= := ; := while + done ::= | + | s sbaBAZ q cc tt ng ng con a, a, bb vvà xoá đđ nh xo xoá nh DS DS XX llà A, B A, B a, |A M2 , Z| p b, B| a, |A q , | > s , Z| a, A| p b, B| , Z| b, |B Chuy Chuy nn dd ch ch không không đđ nn đđ nh nh , Z| 63/77 63/ 77 V n ph m phi ng 64/77 64/ 77 c nh Ví d VP2  Theo phân c p VP c a Chomsky, VP phi ng c nh (PNC) : G   N, , R, S  g m cá s n xu t d ng A   v i A  N,   (N) )* = V*, có h n ch   T G, có có th đ nh ngh a NN PNC : D i làm t s VP PNC :  G1 { S  aSb |  }  G2 { S  aSa | bSb |  }  G3 { S  aB | bA |  L(G1) = anbn, n n0 L(G1) = wwR A  bAA | aS B  bS | aBB } L(G3) g m cá câu ch a cù s ch a ch b m t th t đó L = L(G)  M t NN L là PNC n u t n t i m t VP PNC s n sinh L  G4 { S  aAS | a A  SbA | SS | ba } L(G4) = ? 65/77 65/ 77 66/77 66/ 77 11 Quan h gi a VP2 ôđx Tính ch t c a cá ngôn ng PNC  Các ngôn ng th a nh n b i cá ôtômat đ y xu ng có có th đ c sinh b i cá v n ph m PNC và ng c l i   Cho L1 L2 hai NN PNC, ta có có tí tính ch t sau :  Các ngôn ng sau phi ng c nh : nh lý : M t ngôn ng PNC n u ngôn ng đó đ c th a nh n b i m t ôtômat đ y xu ng L = L(M) = L(G) v i G là VP2 M là ôđx   L1  L2 phé phép h p c a hai NN PNC  L1 L2 phé phép ghé ghép ti p hai NN PNC  L1* l y bao đóng c a m t NN PNC Ngôn ng :  L1  L2 phé phép giao c a hai NN PNC không h n là phi ng c nh !  Tuy nhiên ngôn ng :  LR  L2 PNC v i LR NNCQ và L2 PNC 67/77 67/ 77 68/77 68/ 77 V n đ t o sinh câu c a VP PNC Ví d có nhi u cá cách suy d n  Cho VP PNC G  (N, , R, S) có có L = L(G)  Khi áp d ng cá s n xu t đ t o sinh câu, th t áp d ng không quan tr ng :   Xu t phá phát t ký t đ u S, có có th áp d ng tu ý cá s n xu t, hay dù dùng cá d n xu t khác G đ u có có th t o m t câu Tính “phi ng c nh” nh” th hi n ch : m t ký t không k t thú thúc A AN có có th đ c thay th đ c l p v i cá ký t bao xung quanh (tr (tr c A và sau A), không ph thu c vào “ng c nh” nh”  Tính không quan tr ng v th t áp d ng cá s n xu t đ c tr ng c a cá NN PNC  Cho v n ph m G : G { S  SS | aSa | bSb |  } (đánh s s n xu t)  V i câu w=aabaab, có th có 10 cá cách suy d n khác đ sinh w : Cách (dãy cá SX là 124324) : S 1 SS 2 aSaS 4 aaS 3 aabSb 2 aabaSab 4 S 1 SS 3 SbSb 2 SbaSab 4 Sbaab 2 aSabaab 4 aabaab V.v  S khác c a cá cá cách suy d n w th t áp d ng cá s n xu t c a G 69/77 69/ 77 Ví d hi n t  Trong NN t nhiên nói chung, ti ng Vi t nói riêng, th ng xuyên x y cá hi n t ng nh p nh ng Nh p nh ng v t lo i :  Nh p nh ng v ngh a :  Nh p nh ng v phá phát âm :  Nh p nh ng v ti ng Vi t không d u :     70/77 70/ 77 V n ph m nh p nh ng ng nh p nh ng  aabaab Cách (dãy cá SX là 132424) :  Cho VP PNC G :  VP G đgl nh p nh ng (Ambiguous Grammar) kh Có hai phân tí tích cù suy d n cho m t câu w wL(G)  Cho L là NN PNC :  NN L đgl nh p nh ng c h u (Inherently Ambiguous Language) kh NN L đ c sinh b i nhi u VP khác L = L(G1) = L(G2) = t t c v n ph m G1, G2 nà đ u nh p nh ng  Cho VP PNC G nh p nh ng :  Có th bi n đ i G v G’ t ng đ ng, ng, L(G’ L(G’) = L(G), cho  G không là v n ph m nh p nh ng H c sinh h c sinh h c Ông già già nhanh quá Bà Ba b n b n bá bán bá bánh Nha may Co Gia Lam 71/77 71/ 77 72/77 72/ 77 12 Ví d v n ph m nh p nh ng M t s ví d khác v VP nh p nh ng  Các VP sau đ u :  G1 { S  aSa | bSb | a | b |  }  Cho VP PNC G có có SX : { E  E+E | E*E | a }  VP G nh p nh ng vì có hai PT sinh câu w=a+a*a : 1 a+E 2 a+a*E 3 E  E 2 E*E 1 E+E*E 3 a+E*E 3 a+a*E 3 a+a*a EE + + aa ** E E E E aa aa G2 { S  aS | Sa | a } B ài t p : Bài EE EE EE E E  a+a*a EE EE aa a+E*E 3  E+E 3 Cho ví ính nh p nh ng ví d minh h a tí ttính c a G11 vvà G22 ? EE EE E E + + aa ** aa 73/77 73/ 77 Bài t p ch 74/77 74/ 77 ng H Mô t ôhh đ y xu ng th a nh n cá NN sau : ng d n  Mô t ôhh đ y xu ng th a nh n NN L = anbncm anbncm a) b) anbmcn   V Ođx th a nh n anbn (đã (đã bi t cá cách v ) V ti p Ođx ch đ c cm (không c n ghi nh vào DS X) X) Tìm v n ph m PNC s n sinh cá ngôn ng sau : a) anbncm b) anbmcn Ch ng minh r ng NN { aibjck | i  j ho c i  k } là PNC Ph n bù bù c a ngôn ng c ng là PNC ? G i ý : h i c a cá ngôn ng PNC c ng là PNC Ch ng minh r ng NN { an | n là s nguyên t } không là PNC 75/77 75/ 77 H 76/77 76/ 77 ng d n Tìm v n ph m PNC s n sinh ngôn ng anbncm Ýt ng : v n d ng VP G’ G’ mà L(G’ L(G’ ) = anbn thêm cm  Xây d ng G’ G’ { S  aSb |  } có có L(G’ L(G’) = anbn  Thêm cm đ nh n đ c G nh sau : G { S  AB A  aAb |  B  cB | } }  Qu th t, L(G) = anbncm 77/77 77/ 77 13

Ngày đăng: 22/12/2016, 12:43

w