GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

44 842 4
GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

Đ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

Phân tích từ vựng Phân tích cú pháp Phân tích ngữ nghĩa Chương trình nguồn Bảng ký hiệu từ tố yêu cầu từ tố CHƯƠNG 3 PHÂN TÍCH CÚ PHÁP VÀ CÁC PHƯƠNG PHÁP PHÂN TÍCH CƠ BẢN. 1. MỤC ĐÍCH. Phân tích cú pháp nhận đầu vào là danh sách các từ tố của chương trình nguồn thành các thành phần theo văn phạm và biểu diễn cấu trúc này bằng cây phân tích hoặc theo một cấu trúc nào đó tương đương với cây. Bộ phân tích cú pháp nhận chuỗi các token từ bộ phân tích từ vựng và tạo ra cây phân tích cú pháp. Trong thực tế còn một số nhiệm vụ thu nhập thông tin về token vào bảng ký hiệu, thực hiện kiểm tra kiểu về phân tích ngữ nghĩa cũng như sinh mã trung gian. Các phần này sẽ được trình bày trong các chương kế. 2. HOẠT ĐỘNG CỦA BỘ PHÂN TÍCH. 2.1.Văn phạm phi ngữ cảnh. 2.1.1. Định nghĩa. * Định nghĩa: Văn phạm PNC (như trên). * Dạng BNF (Backus – Naur Form) của văn phạm phi ngữ cảnh + Các ký tự viết hoa: biểu diễn ký hiệu không kết thúc, (có thể thay bằng một xâu đặt trong dấu ngoặc < > hoặc một từ in nghiêng). + Các ký tự viết chữ nhỏ và dấu toán học: biểu diễn các ký hiệu kết thúc (có thể thay bằng một xâu đặt trong cặp dấu nháy kép “ ” hoặc một từ in đậm). + ký hiệu -> hoặc = là: ký hiệu chỉ phạm trù cú pháp ở vế trái được giải thích bởi vế phải. + ký hiệu | chỉ sự lựa chọn. Ví dụ: <Toán hạng> = <Tên> | <Số> | “(” <Biểu thức> “)” hoặc ToánHạng -> Tên | Số | ( BiểuThức 0 1 2* Start chu cai khac chucai chucai Hình 2.1: Đồ thị chuyển cho từ tố Tên 2.1.2. Đồ thị chuyển biểu diễn văn phạm phi ngữ cảnh: - Các vòng tròn với ký hiệu bên trong biểu thị cho trạng thái. Các chữ trên các cung biểu thị cho ký hiệu vào tiếp theo. Trạng thái vẽ bằng một vòng tròn kép là trạng thái kết thúc. Nếu trạng thái kết thúc có dấu * nghĩa là ký hiệu cuối không thuộc xâu đoán nhận. 2.1.3. Cây suy dẫn. 2.1.3.1. Suy dẫn. Cho văn phạm G=(T,N,P,S). - Suy dẫn trực tiếp là một quan hệ hai ngôi ký hiệu => trên tập V* nếu αβγ là một xâu thuộc V* và β->δ là một sản xuất trong P, thì αβγ => αδγ. - Suy dẫn k bước, ký hiệu là k => hay k βα => nếu tồn tại dãy α 0 , α 1 , . . . , α k sao cho: α = α 0 => α 1 => . . . => α k = β - Xâu α suy dẫn xâu nếu k>=0 và ký hiệu là * βα => - Xâu α suy dẫn không tầm thường xâu β nếu k>0 và ký hiệu là + => βα 2.1.3.2. C â y ph â n t í ch ( c â y suy dẫn ) * Định nghĩa: Cây phân tích trong một văn phạm phi ngữ cảnh G = (T,N,P,S) là một cây thỏa mãn các điều kiện sau: 1. Mọi nút có một nhãn, là một ký hiệu trong (T ∪ N ∪ {ε}) 2. Nhãn của gốc là S 3. Nếu một nút có nhãn X là một nút trong thì X ∈ N 4. Nếu nút n có nhãn X và các nút con của nó theo thứ tự trái qua phải có nhãn Y 1 , Y 2 , . . ., Y k thì X->Y 1 Y 2 . . . Y k sẽ là một sản xuất ∈ P 5. Nút lá có nhãn thuộc T hoặc là ε * Suy dẫn trái nhất (nói gọn là suy dẫn trái), nếu ở mỗi bước suy dẫn, biến được thay thế là biến nằm bên trái nhất trong dạng câu. * Suy dẫn phải nhất: (nói gọn là suy dẫn phải), nếu ở mỗi bước suy dẫn, biến được thay thế là biến nằm bên phải nhất trong dạng câu. 2.1.3.3. Đệ qui * Định nghĩa: Ký hiệu không kết thúc A của văn phạm gọi là đệ qui nếu tồn tại: + => βα AA với α, β ∈ V +  Nếu α = ε thì A gọi là đệ qui trái.  Nếu β = ε thì A gọi là đệ qui phải.  Nếu α,β ∉ ε thì A gọi là đệ qui trong. * Có 2 loại dệ quy trái :  Loại ttrực tiếp: có dạng A → Aα ( A ⇒ + Aα )  Loại gián tiếp: Gây ra do nhiều bước suy dẫn. (VÝ dô: S → Aa | b; A → Ac | Sd; S lµ ®Ö qui tr¸i v× S ⇒ Aa ⇒ Sda) * Loại bỏ đệ qui trái: (loại bỏ suy dẫn A => + Aα ) - Giả sử có luật đệ qui trái A->Aα | β chúng ta thay các luật này bằng các luật: A -> βA’ A’ -> αA’ | ε - Tổng quát hoá lên ta có: Nếu có các luật đệ qui trái: A -> Aα 1 | Aα 2 | . . .| Aα m | β 1 | β 2 | . . .| β n trong đó không β i nào bắt đầu bằng một A . Thay các sản xuất này bởi các sản xuất: A -> β 1 A’ | β 2 A’ | . . . | β n A’ A’ -> α 1 A’ | α 2 A’ | . . . | α m A’ | ε Ví dụ2: Xét văn phạm biểu thức số học sau: E -> E + T | T ; T -> T * F | F; F -> ( E ) | id Loại bỏ đệ qui trái trực tiếp cho các sản xuất của E rồi của T, ta được văn phạm mới không còn sản xuất có đệ qui trái như sau: E -> TE’; E’-> +TE’ | ε ; T -> FT’; T’ -> *FT’ | ε ; F -> (E) | id Qui tc ny loi b c qui trỏi trc tip nm trong cỏc sn xut nhng khụng loi b c qui trỏi nm trong cỏc dn xut cú hai hoc nhiu bc. Qui tc ny cng khụng loi b c qui trỏi ra khi sn xut A->A. Với đệ qui trái gián tiếp và nói chung là đệ qui trái, ta sử dụng giải thuật sau: Ví dụ : Với S Aa | b; A Ac | Sd. Sp xp cỏc ký hiu cha kt thỳc theo th t S,A Vi i=1, khụng cú qui trỏi trc tip nờn khụng cú iu gỡ xy ra. vi i=2 , thay lut sinh ASd c AAc | Aad | bd. Loi b qui trỏi trc tip cho A, ta c: SAa |b; AbdA'; A' cA' | adA' | e * Phộp tha s hoỏ trỏi Tha s hoỏ trỏi (left factoring) l mt phộp bin i vn phm nhm sinh ra mt vn phm thớch hp cho vic phõn tớch cỳ phỏp khụng quay lui. í tng c bn l khi khụng rừ sn xut no trong trong hai sn xut cú cựng v trỏi l A c dựng khai trin A thỡ ta cú th vit li cỏc sn xut ny nhm hoón li quyt nh, cho n khi cú thụng tin a ra c quyt nh la chn sn xut no. - Nu cú hai sn xut A -> 1 | 2 thỡ ta khụng bit phi khai trin A theo 1 hay 2 . Khi ú, thay hai sn xut ny bng: A -> A; A -> 1 | 2 Input: Vn phm khụng tun hon hoc e_sx (khụng cú dng A + A hoc Ae) Output: Vn phm tng ng khụng qui trỏi Phng phỏp: 1. Sp xp cỏc ký hiu khụng kt thỳc theo th t A 1 , A 2 A n 2. For i:=1 to n do Begin for j:=1 to i-1 do Begin Thay lut sinh dng Ai Aj bi lut sinh Aj d 1g | d 2g | |d kg Trong ú Aj d 1g | d 2g | |d ky l cỏc lut sinh hin ti End Loi b qui trỏi trc tip trong s cỏc Ai loi End; S S + S S * a a a S S S * S S + S a a a Ví dụ: S -> iEtS | iEtSeS | a; E -> b Khi được thừa số hoá trái, văn phạm này trở thành: S -> iEtSS’ | a; S’ -> eS | ε ; E -> b vì thế khi cần khai triển S với ký hiệu xâu vào hiện tại là i, chúng ta có thể lựa chọn iEtSS’ mà không phải băn khoăn giữa iEtS và iEtSeS của văn phạm cũ. Gi¶i thuËt t¹o thõa sè ho¸ tr¸i (yÕu tè tr¸i) cho mét v¨n ph¹m: Input: Văn phạm G Output: Văn phạm tương đương với nhân tố trái. Ph ơng pháp: Với mỗi ký hiệu chưa kết thúc A, có các ký hiệu dẫn đầu các vế phải giống nhau, ta tìm một chuỗi a là chuỗi có độ dài lớn nhất chung cho tất cả các vế phải (a là nhân tố trái) Giả sử A → ab 1 | ab 2 | | ab n | g Trong đó g không có chuỗi dẫn đầu chung với các vế phải khác. Biến đổi luật sinh thành A → a A ' | g A' → b 1 | b 2 | | b n 2.1.3.4. Nhập nhằng Một văn phạm G được gọi là văn phạm nhập nhằng nếu có một xâu α là kết quả của hai cây suy dẫn khác nhau trong G. Ngôn ngữ do văn phạm này sinh ra gọi là ngôn ngữ nhập nhằng. Ví dụ: Xét văn phạm G cho bởi các sản xuất sau: S -> S + S | S * S | ( S ) | a Với xâu vào là w = “a+a*a” ta có: Văn phạm này là nhập nhằng vì có hai cây đối với câu vào w như sau: Chúng ta có ví dụ đối suy dẫn trái (đối với cây đầu tiên) là: S => S * S => S + S => S + S * S => a + S * S => a + a * S => a + a * a suy dẫn phải (đối với cây đầu tiên ) là: S => S * S => S * a => S + S * a => S + a * a => a + a * a. 2.2. các phương pháp phân tích. - Mọi ngôn ngữ lập trình đều có các luật mô tả các cấu trúc cú pháp. Một chương trình viết đúng phải tuân theo các luật mô tả này. Phân tích cú pháp là để tìm ra cấu trúc dựa trên văn phạm của một chương trình nguồn. - Thông thường có hai chiến lược phân tích: + Phân tích trên xuống (topdown): Cho một văn phạm PNC G = (Σ, ∆, P, S) và một câu cần phân tích w. Xuất phát từ S áp dụng các suy dẫn trái, tiến từ trái qua phải thử tạo ra câu w. + Phân tích dưới lên (bottom-up): Cho một văn phạm PNC G = (Σ, ∆, P, S) và một câu cần phân tích w. Xuất phát từ câu w áp dụng thu gọn các suy dẫn phải, tiến hành từ trái qua phải để đi tới kí hiệu đầu S. Theo cách này thì phân tích Topdown và LL(k) là phân tích trên xuống, phân tích Bottom-up và phân tích LR(k) là phân tích dưới lên. * Điều kiện để thuật toán dừng: + Phân tích trên xuống dừng khi và chỉ khi G kông có đệ quy trái. + Phân tích dưới lên dừng khi G không chứa suy dẫn A ⇒ + A và sản xuất A→ε. * Có các phương pháp phân tích. 1) Phương pháp phân tích topdown. 2) Phương pháp phân tích bottom up. 3) Phương pháp phân tích bảng CYK. 4) Phương pháp phân tích LL. 5) Phương pháp phân tích LR. Phương pháp 1 và 2: là các phương pháp cơ bản, kém hiệu quả. Phương pháp 5,6 là phương pháp phân tích hiệu quả. 2.3.1. phân tích topdown. S a S b S a S b S a* S (2) S a S b S a b SS a* S b S (1) S a S b S a S b S c a* S b S (3) S a S b S a S b S c a* S (4) Phương pháp phân tích Top-down xây dựng cây phân tích cho một xâu vào bằng cách xuất phát từ ký hiệu bắt đầu làm gốc và sử dụng các luật sản xuất để đi từ gốc đến lá. - Đánh dấu thứ tự các lựa chọn của các sản xuất có cùng vế trái. Ví dụ nếu các sản xuất có dạng S -> aSbS | aS | c thì aSbS là lựa chọn thứ nhất, aS là lựa chọn thứ hai và c là lựa chọn thứ ba trong việc khai triển S. - Tại mỗi bước suy diễn, ta cần triển khai một ký hiệu không kết thúc A và văn phạm có các sản xuất có vế trái là A là A-> α 1 | α 2 | . . .| α k Khi đó ta có k thứ tự lựa chọn, đánh dấu thứ tự lựa chọn các sản xuất sau đó khai triển A theo một lựa chọn, nếu quá trình phân tích là không thành công thì quay lui tại vị trí này và khai triển A theo lựa chọn tiếp theo. Phân tích Top-down là phương pháp phân tích có quay lui và tạo ra suy dẫn trái nhất. Ví dụ: Cho văn phạm S -> aSbS | aS | c Hãy phân tích xâu vào “aacbc” bằng thuật toán Top-down, vẽ cây phân tích trong quá trình phân tích quay lui. S a S b S a S b S c c* (5) S a S b S a S a* S b S (6) S a S b S a S a* S (7) S a S b S a S c a* S b S (8) S a S b S a S c a* S (9) S a S b S a S c c 10 2.3.1.1. Mô tả thuật toán phân tích Top-down - Input: Văn phạm PNC G = (Σ, ∆, P, S) không đệ quy trái, xâu w = a 1 , a 2 , … a n - Output: Cây phân tích từ trên xuống của xâu w (w ∈ L(G)), báo lỗi (w ∉ L(G)). - Method: Dùng một con trỏ chỉ đến xâu vào w. Ký hiệu trên xâu vào do con trỏ chỉ đến gọi là ký hiệu vào hiện tại. 1) Khởi tạo cây với gốc là S, con trỏ trỏ đến kí hiệu đầu tiên của xâu w là a 1 . 2) Nếu nút đang xét ∈ ∆ (là ký hiệu không kết thúc) A thì chọn sản xuất có vế trái là A trong P, giả sử sản xuất A → X 1 .X k . + Nếu k > 0: lấy nút X 1 làm nút đang xét. + Nếu k=0 (sản xuất rỗng) thì lấy nút ngay bên phải A làm nút đang xét. 3) Nếu nút đang xét ∈ Σ (là ký hiệu kết thúc) a thì đối sánh a với ký hiệu vào hiện tại. + Nếu trùng nhau: thì lấy nút ngay bên phải a làm nút đang xét, con trỏ dịch sang bên phải một ký hiệu trên xâu w. + Nếu không: quay lại nút trước đó và lặp lại b2 với thử lựa chọn tiếp theo. Thủ tục trên lặp lại sau hữu hạn bước và có 2 khả năng xảy ra: - Nếu gặp trường hợp đối sánh hết xâu vào và cây không còn nút nào chưa xét nữa thì ta được một cây phân tích. - Nếu đã quay lui hết tất cả các trường hợp mà không sinh được cây phân tích thì kết luận xâu vào không phân tích được bởi văn phạm đã cho. * Điều kiện để một văn phạm phi ngữ cảnh phân tích được bởi thuật toán Top- down là văn phạm không có đệ qui trái. (Vì vậy ta phải thực hiện loại bỏ đệ quy trái trước khi phân tích văn phạm theo phương pháp topdown) * Độ phức tạp thuật toán là hàm số mũ n với n là độ dài xâu vào. 2.3.2. phân ttích bottom - up. Phương pháp phân tích Bottom-up về tư tưởng là ngược lại với phương pháp Top-down. - Xây dựng cú pháp cho xâu nhập bắt đầu từ lá lên tới gốc. Đây là quá trình rút gọn một xâu thành một kí hiệu mở đầu của văn phạm. Tại mỗi bước rút gọn, một xâu con bằng một xâu phải của một sản xuất nào đó thì xâu con này được thay thế bi v trỏi ca sn xut ú. (cũn gi l phng phỏp gt thu gn - shift reduce parsing). Có 2 vấn đề: xác định handle và chọn luật sinh. * Cấu tạo: - 1 STACK để lu các ký hiệu văn phạm. - 1 BUFFER INPUT để giữ chuỗi cần phân tích w. - Dùng $ để đánh dấu đáy stack và cuối chuỗi nhập. * Hoạt động: - Khởi đầu thì stack rỗng và w nằm trong input buffer. Bộ phân tích gt ln lt cỏc ký hiu u vo t trỏi sang phi vo ngn xp n khi no t c mt thu gn thỡ thu gn (thay th v phi xut hin trờn nh ngn xp bi v trỏi ca sn xut ú).Nu cú nhiu cỏch thu gn ti mt trng thỏi thỡ lu li cho quỏ trỡnh quay lui. Quỏ trỡnh c tip tc, nu dng li m cha t n trng thỏi kt thỳc thỡ quay li ti bc quay lui gn nht. - Nu quỏ trỡnh t n trng thỏi ngn xp l $S v xõu vo l $ thỡ quỏ trỡnh kt thỳc v phõn tớch thnh cụng. - Nu ó xột ht tt c cỏc trng hp, tc l khụng quay lui c na m cha t n trng thỏi kt thỳc thỡ dng li v thụng bỏo xõu vo khụng phõn tớch c bi vn phm ó cho. Vớ d: S -> aABe; A -> Abc | b; B -> d; Phõn tớch cõu vo abbcde quỏ trỡnh phõn tớch Bottom-up nh sau: Ngn xp u vo Hnh ng $ abbcde$ gt $a bbcde$ gt $ab bcde$ thu gn A -> b $aA bcde$ gt $aAb cde$ thu gn A -> b (2) $aAA cde$ gt $aAAc de$ gt $aAAcd e$ thu gn B -> d (1) $aAAcB e$ gt $aAAcBe $ dng, quay lui 1 (gt) $aAAcde $ dng, quay lui 2 (gt) $aAbc de$ thu gn A -> Abc $aA de$ gt $aAd e$ thu gn B -> d $aAB e$ gt $aABe $ thu gn S -> aABe $S $ chp nhn [...]... khong trng biu th li trng thỏi 0 1 2 3 4 5 6 7 8 9 10 11 goto Action a s5 + * s6 r2 r4 ( S4 s7 r4 $ r2 r4 s5 ) E 1 acc r2 r4 r6 r6 2 3 9 r6 s5 s5 F 3 8 S4 T 2 3 10 r6 S4 S4 s6 r1 r3 r5 s11 r1 r3 r5 s7 r3 r5 r1 r3 r5 Bng phõn tớch cỳ phỏp Chỳng ta s dng thut toỏn LR phõn tớch xõu vo a*a+a i vi d liu trờn nh sau: Ngn xp 0 0 id 5 0F3 0T2 0T2*7 0 T 2 * 7 id 5 0 T 2 * 7 F 10 0T2 0E1 0E1+6 0 E 1 + 6 id 5 0E1+6F3... tớch: (s0X1s1X2s2 Xmsm, ai ai+1 an $) * Hot ng: Vi sm l ký hiu trờn nh Stack, ai l ký hiu nhp hin ti, cu hỡnh cú c sau mi dng bc y s nh sau : 1 Nu action [sm, ai] = Shift s : Thc hin phộp y c cu hỡnh mi : (s0X1s1X2s2 Xmsm ais, ai +1 an $) Phộp y lm cho s nm trờn nh Stack, ai+1 tr thnh ký hiu hin hnh 2 Nu action [sm, ai] = Reduce(A ) thỡ thc hin phộp thu gn c cu hỡnh : (s0X1s1X2s2 Xm - ism -... tip theo s ph thuc vo tp mc cú ngha I ca tin t kh tn thuc x Vi mt mc [A->1 .2] I, cho chỳng ta bit x cú dng 1, v quỏ trỡnh phõn tớch phn cũn li w ca xõu u vo nu theo sn xut A-> 12 s c tip tc t 2 ca mc ú Hnh ng gt hay thu gn s ph thuc vo 2 l rng hay khụng Nu 2 = thỡ phi thu gn 1 thnh A, cũn nu 2 thỡ vic phõn tớch theo sn xut A-> 12 ũi hi phi s dng hnh ng gt Nhn xột: - Mi quỏ trỡnh phõn tớch tip theo ca... ca biu thc: E' E E E+T|T T T*F|F F (E) | id Nu I l tp hp ch gm vn phm {E' E} thỡ closure(I) bao gm: E' E (Lut 1) EE+T (Lut 2) ET (Lut 2) TT*F (Lut 2) TF (Lut 2) F (E) (Lut 2) F id (Lut 2) E' E c t vo closure(I) theo lut 1 Khi cú mt E i ngay sau mt , bng lut 2 ta thờm cỏc sn xut E vi cỏc chm nm u trỏi ( E E + T v E T) Bõy gi li cú T i theo sau mt , ta li thờm T T * F v T F vo Cui... "reduce (E T)" Mc th hai lm cho action [2, *] = "shift 7" Tip tc theo cỏch ny, ta thu c bng phõn tớch cỳ phỏp SLR: K n xột I2: trng thỏi 0 1 2 3 4 5 6 7 8 9 10 11 Action a + s5 s6 r2 r4 s5 r6 s5 s5 s6 r1 r3 r5 * ( S4 3 3 10 r6 S4 S4 s11 r1 r3 r5 s7 r3 r5 2 9 r6 F 3 acc r2 r4 S4 r6 T 2 8 $ r2 r4 s7 r4 ) goto E 1 r1 r3 r5 Bng phõn tớch xỏc nh bi gii thut 4.7 gi l bng SLR(1) ca vn phm G, b phõn tớch LR s dng... Goto (I0, E) I1: E -> E E -> E+.T E -> E.+T T -> T*F T -> F F -> (E) F -> a Goto (I0, T) I2: E -> T T -> T.*F Goto (I2, *) I7: F -> (E) F -> a T -> T*.F S chuyn trng thỏi ca DFA cho cỏc tin t kh tn: E I0 + I1 T I6 I9 F ( F F I10 I4 a I7 I5 ( * I2 I4 a T I3 I5 I3 ( ( E I4 I8 ) + T F a a I5 I2 I3 I11 I6 * I7 2. 3.4 .2 Vn phm LR Lm th no xõy dng c mt bng phõn tớch cỳ phỏp LR cho mt vn phm ó cho ? Mt vn... L = R I1 : S' S RL I2 : S L = R L*R L id R L : S R I7 : I3L * R I4 : L * R RL I8 : R L I9 : S L = R L*R L id Khi xõy dng bng phõn tớch SLR cho vn phm, khi xột tp mc I2 ta thy mc u tiờn trong tp ny lm cho action [2, =] = "shift 6" Bi vỡ = FOLLOW(R), nờn mc th hai s t action [2, =] = "reduce (R L)" Cú s ng ti action [2, =] Vy vn phm trờn khụng l vn phm SLR(1) 2. 3.4.4 Xõy dng bng phõn... trờn Trng thỏi 0 1 2 3 4 5 6 7 8 9 10 11 12 13 = Action * id s4 s5 $ S 1 Goto L R 2 3 acc r5 r2 s6 s4 s5 8 7 s11 s 12 10 9 10 13 r4 r3 r5 r1 r5 s11 s 12 r4 r3 Hỡnh 4.14 - Bng phõn tớch cỳ phỏp LR chớnh tc Mi vn phm SLR(1) l mt vn phm LR(1), nhng vi mt vn phm SLR(1), b phõn tớch cỳ phỏp LR chớnh tc cú th cú nhiu trng thỏi hn so vi b phõn tớch cỳ phỏp SLR cho vn phm ú 2. 3.4.5 Xõy dng bng phõn tớch LALR ... cỏch tớnh tp J nh sau: 1 nu [A->.X] I thỡ thờm [A->X.] vo J 2 J=closure(J) Phộp toỏn goto l phộp phỏt trin xõy dng tt c cỏc tp mc cho tt c cỏc tin t kh tn cú th Vớ d : Gi s I = {E' E, E E + T} Tớnh goto (I, +) ? Ta cú J = { E E + T} goto (I, +) = closure(I') bao gm cỏc mc : EE+T (Lut 1) TT*F (Lut 2) TF (Lut 2) F (E) (Lut 2) F id (Lut 2) Tớnh Goto(I,+) bng cỏch kim tra I cho cỏc mc vi du + ngay... goto Phng phỏp: 1 Xõy dng C = { I0, I1, , In }, h tp hp cỏc mc LR(0) ca G' 2 Trng thỏi i c xõy dng t Ii Cỏc action tng ng trng thỏi i c xỏc nh nh sau: 2. 1 Nu A a Ii v goto (Ii, a) = Ij thỡ action[i, a] = "shift j" õy a l ký hiu kt thỳc 2. 2 Nu A Ii thỡ action[i, a] = "reduce (A )", a FOLLOW(A) õy A khụng phi l S' 2. 3 Nu S' S Ii thỡ action[i, $] = "accept" Nu mt action ng c sinh ra bi . sinh mã trung gian. Các phần này sẽ được trình bày trong các chương kế. 2. HOẠT ĐỘNG CỦA BỘ PHÂN TÍCH. 2. 1.Văn phạm phi ngữ cảnh. 2. 1.1. Định nghĩa. * Định. a => a + a * a. 2. 2. các phương pháp phân tích. - Mọi ngôn ngữ lập trình đều có các luật mô tả các cấu trúc cú pháp. Một chương trình viết đúng phải

Ngày đăng: 03/10/2013, 12:20

Hình ảnh liên quan

Đặt tất cả cỏc vị trớ chưa được định nghĩa trong bảng là “lỗi”. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

t.

tất cả cỏc vị trớ chưa được định nghĩa trong bảng là “lỗi” Xem tại trang 17 của tài liệu.
Giải thuật trờn cú thể ỏp dụng bất kỳ văn phạm G nào để sinh ra bảng phõn tớch M. Tuy nhiờn cú những văn phạm ( đệ quy trỏi và nhập nhằng) thỡ trong bảng  phõn tớch M cú những ụ chứa nhiềuhơn một luật sinh. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

i.

ải thuật trờn cú thể ỏp dụng bất kỳ văn phạm G nào để sinh ra bảng phõn tớch M. Tuy nhiờn cú những văn phạm ( đệ quy trỏi và nhập nhằng) thỡ trong bảng phõn tớch M cú những ụ chứa nhiềuhơn một luật sinh Xem tại trang 17 của tài liệu.
- Để kiểm tra văn phạm cú phải là văn phạm LL(1) hay khụng ta lập bảng phõn tớch LL(1) cho văn phạm đú - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

ki.

ểm tra văn phạm cú phải là văn phạm LL(1) hay khụng ta lập bảng phõn tớch LL(1) cho văn phạm đú Xem tại trang 18 của tài liệu.
3. nếu X là một ký hiệu khụng kết thỳc, xột mục M(X,a) trong bảng phõn tớch. Cú hai trường hợp xảy ra: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

3..

nếu X là một ký hiệu khụng kết thỳc, xột mục M(X,a) trong bảng phõn tớch. Cú hai trường hợp xảy ra: Xem tại trang 19 của tài liệu.
c) xõy dựng bảng phõn tớch LL(1) cho văn phạm trờn - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

c.

xõy dựng bảng phõn tớch LL(1) cho văn phạm trờn Xem tại trang 20 của tài liệu.
Từ bảng phõn tớch, chỳng ta cú suy dẫn trỏi như sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

b.

ảng phõn tớch, chỳng ta cú suy dẫn trỏi như sau: Xem tại trang 21 của tài liệu.
Input: Một chuỗi nhập w, một bảng phõn tớch LR với hàm action và goto cho văn phạm - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

nput.

Một chuỗi nhập w, một bảng phõn tớch LR với hàm action và goto cho văn phạm Xem tại trang 23 của tài liệu.
Bảng phõn tớch cỳ phỏp - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

Bảng ph.

õn tớch cỳ phỏp Xem tại trang 24 của tài liệu.
Giả sử chỳng ta đó xõy dựng được bảng phõn tớch action và goto như sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

i.

ả sử chỳng ta đó xõy dựng được bảng phõn tớch action và goto như sau: Xem tại trang 24 của tài liệu.
Tiếp tục theo cỏch này, ta thu được bảng phõn tớch cỳ phỏp SLR: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

i.

ếp tục theo cỏch này, ta thu được bảng phõn tớch cỳ phỏp SLR: Xem tại trang 33 của tài liệu.
* Thuật toỏn xõy dựng bảng phõn tớch cỳ phỏp LR chớnh tắc - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

hu.

ật toỏn xõy dựng bảng phõn tớch cỳ phỏp LR chớnh tắc Xem tại trang 35 của tài liệu.
Bảng phõn tớch xỏc định bởi giải thuật 4.9 gọi là bảng phõn tớch LR(1) chớnh tắc của văn phạm G, bộ phõn tớch LR sử dụng bảng LR(1) gọi là bộ phõn tớch LR(1) chớnh tắc và văn phạm cú một bảng LR(1) khụng cú cỏc action đa trị thỡ được gọi là văn phạm LR(1) - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

Bảng ph.

õn tớch xỏc định bởi giải thuật 4.9 gọi là bảng phõn tớch LR(1) chớnh tắc của văn phạm G, bộ phõn tớch LR sử dụng bảng LR(1) gọi là bộ phõn tớch LR(1) chớnh tắc và văn phạm cú một bảng LR(1) khụng cú cỏc action đa trị thỡ được gọi là văn phạm LR(1) Xem tại trang 36 của tài liệu.
Ta cú thể xõy dựng bảng phõn tớch cỳ phỏp LALR cho văn phạm như sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

a.

cú thể xõy dựng bảng phõn tớch cỳ phỏp LALR cho văn phạm như sau: Xem tại trang 38 của tài liệu.
Hỡnh - Bảng phõn tớch cỳ phỏp LALR - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

nh.

Bảng phõn tớch cỳ phỏp LALR Xem tại trang 38 của tài liệu.
- Mục M(A,a) trong bảng phõn tớch là lỗi (rỗng). - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

c.

M(A,a) trong bảng phõn tớch là lỗi (rỗng) Xem tại trang 40 của tài liệu.
Phương phỏp phõn tớch bảng CYK (Cocke – Younger – Kasami) - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH PHẦN 2

h.

ương phỏp phõn tớch bảng CYK (Cocke – Younger – Kasami) Xem tại trang 42 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan