Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
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 (BNFBackusNaur Normal Form), hay d ng BackusBackus-Naur m r ng (EBNF (EBNFExtended 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 n0 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 AN 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 wL(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