Điều này là“ ” có thể thực hiện đợc, thông qua cơ chế biên dịch của Trình Biên Dịch, kết hợp với ngôn ngữ C Sharp hay còn gọi là C # là phiên bản mới nhất trong bộ Visual Studio.Net củ
Trang 1Lời nói đầu !
Chúng ta đang sống trong thế kỷ XXI thế kỷ của CNTT, của nền kinh
tế tri thức, xu thế toàn cầu hóa và của nền văn minh tin học Máy tính ra
đời làm thay đổi cả thế giới, nó thâm nhập vào mọi lĩnh vực của cuộc sống
và trở thành phơng tiện xử lý thông tin một cách nhanh chóng, hiệu quả Trong sự phát triển không ngừng của nghành tin học thì việc xây dựng các ngôn ngữ lập trình mới là đang và ngày càng đợc khuyến khích Điều đó đã làm xuất hiện không ít ý tởng xây dựng các chơng trình sử dụng ngôn ngữ lập trình viết bằng tiếng Việt của các nhà lập trình ở Việt Nam Bởi hầu hết các ngôn ngữ lập trình nh Pascal, C, C++, Java v v đều bằng tiếng Anh nên đã gây nhiều khó khăn cho ngời lập trình, nhất là những ngời mà trình
độ tiếng Anh còn hạn chế Thiết nghĩ rằng, chúng ta là những con ngời Việt Nam thì tại sao không sử dụng ngôn ngữ Việt Nam vào việc xây dựng ngôn ngữ lập trình? Cũng xuất phát từ nguyện vọng đó, trong đề tài này em xin
đa ra một ý tởng Xây dựng một ngôn ngữ lập trình tiếng Việt Điều này là“ ”
có thể thực hiện đợc, thông qua cơ chế biên dịch của Trình Biên Dịch, kết hợp với ngôn ngữ C Sharp ( hay còn gọi là C # ) là phiên bản mới nhất trong bộ Visual Studio.Net của hãng Microsoft để viết ra một ngôn ngữ lập trình tiếng việt Vậy Trình Biên Dịch nghĩa là gì và C Sharp nghĩa là gì, chúng hoạt động ra sao và có liên quan với nhau nh thế nào ? Tất cả sẽ đ-
ợc nghiên cứu trong đề tài: “Tìm hiểu Về Trình Biên Dịch và
Xây Dựng Ngôn Ngữ Lập Trình Tiếng Việt Đề tài chia”
Trang 2Chơng 5: Giới thiệu ngôn ngữ
Chơng này nêu một số vấn đề về C Sharp và ngôn ngữ Tiếng Việt.
-**** -Một chơng trình hay, hoàn hảo đáp ứng nhu cầu thực tế là mục tiêu của tất cả những ai quan tâm đến lập trình nói chung và chơng trình này nói riêng Tuy nhiên do lần đầu thực hiện bằng ngôn ngữ mới, trình độ còn hạn chế và thời gian ngắn nên chơng trình chỉ mới giới thiệu đợc ý tởng trong phạm vi hẹp và chắc chắn không tránh khỏi thiếu sót, em rất mong“ ” đợc sự góp ý, giúp đỡ của các thầy cô trong khoa và các bạn Nhân đây em xin đợc gửi lời cảm ơn chân thành tới thầy giáo Nguyễn Công Nhật đã nhiệt tình gúp đỡ em hoàn thành đề tài này Trong quá trình thực hiện em đã nhận đợc nhiều sự động viên, giúp đỡ của thầy cô và bạn bè, em xin đợc bày tỏ lòng cảm ơn và hứa sẽ cố gắng hơn nữa để chơng trình này ngày càng hoàn chỉnh hơn Vinh ngày 3 tháng 5 năm 2006 Nguyễn Thị Nha Trang Lớp: K42E3 Tin Khoa CNTT - Đại Học Vinh Mục Lục Lời nói đầu Mục Lục Chơng 1: Tổng quan về trình biên dịch 6
1 Giới thiệu về trình biên dịch 6
1.1 Cơ chế biên dịch 6
1.2 Cơ chế thông dịch 7
2 Giới thiệu văn phạm Automat 7
2.1 Khái niệm văn phạm 7
2.2 Automat 8
3 Khái quát chơng trình 9
Chơng 2: Bộ phân tích từ vựng 10
1 Vai trò và nhiệm vụ 10
2 Mô hình hoạt động 10
3 Phát hiện và xử lý lỗi 10
Trang 35 Phơng pháp xây dựng DFA( Determinstic Finite Automation) trực tiếp
từ biểu thức chính quy 11
6 Xây dựng bộ phân tích từ vựng 12
6.1 Xây dựng vùng đệm nhập 12
6.2 Xây dựng bảng danh hiệu 12
6.3 Sơ đồ dịch 13
Chơng 3: Bộ phân tích cú pháp 15
1 Giới thiệu chung về bộ phân tích cú pháp 15
1.1 Vai trò và nhiệm vụ 15
1.2 Phân loại văn phạm 15
1.3 Cây dẫn xuất 15
1.4 Khái niệm về câu, dạng câu 15
1.5 Thiết kế văn phạm 15
1.5.1 Văn phạm đệ quy trái trực tiếp 15
1.5.2 Văn phạm đệ quy trái gián tiếp 16
1.5.3 Văn phạm yếu tố trái 17
2 Bộ phân tích cú pháp đoán nhận trớc không đệ quy 18
2.1 Nguyên tắc phân tích 18
2.2 Mô hình hoạt động 18
2.3 Xây dựng bảng phân tích 20
2.3.1 Xác định tập First của các kí hiệu cha kết thúc 20
2.3.2 Xác định tập Follow của các kí hiệu cha kết thúc 20
2.3.3 Giải thuật xây dựng bảng phân tích 20
3.4 Vấn đề xử lý lỗi 21
3 Bộ phân tích cú pháp thứ tự yếu 25
3.1 Nguyên tắc phân tích 25
3.2 Mô hình hoạt động 25
3.3 Xây dựng bảng phân tích 26
3.3.1 Quan hệ thứ tự yếu 26
3.3.2 Phơng pháp xác định quan hệ thứ tự yếu cho các kýhiệu văn phạm 26
3.3.3 Giải thuật xây dựng bảng phân tích 27
4 Bộ phân tích cú pháp LR 31
4.1 Nguyên tắc phân tích 31
4.2 Mô hình hoạt động 31
4.3 Xây dựng bảng phân tích 35
Chơng 4 Bộ xử lý ngữ nghĩa 43
1 Tổng quát 43
2 Các cấu trúc lệnh 44
2.1 Cấu trúc rẽ nhánh 44
2.2 Cấu trúc lệnh Switch 45
2.3 Các cấu trúc lặp 46
2.3.1 Lệnh while 46
2.3.2 Lệnh do while… 46
2.3.3 Khối lệnh for 47
Chơng 5: Giới thiệu ngôn ngữ 48
Trang 41 Giới thiệu ngôn ngữ C Sharp (C#) 49
2 Giới thiệu ngôn ngữ lập trình tiếng việt 49
2.1 Tập ký hiệu 49
2.2 Luật danh hiệu 49
2.3 Các toán tử 49
2.4 Các lệnh chơng trình 50
2.4.1 Lệnh khai báo biến 50
2.4.2 Các lệnh xử lý điều kiện rẽ nhánh 50
2.4.3 Các câu lệnh lặp 51 Kết luận
Tài liệu tham khảo
Chơng 1: Tổng Quan về trình biên dịch
1 Giới Thiệu Về Trình Biên Dịch:
Chúng ta đã thờng quen thuộc với thuật ngữ thông dịch và biên dịch
Ví dụ trong cuộc sống chúng ta thờng nghe những ngời làm thông dịch viên tiếng Anh , tiếng Pháp v v là những ngời nghe từng câu trong ngôn ngữ khác và dịch lại từng câu cho ngời khác ở đây trình biên dịch đóng vai trò nh một ngời thông dịch trong việc dịch một mã văn bản chơng trình nguồn của một ngôn ngữ lập trình ra mã máy Cơ chế thông dịch có thể là biên dịch hoặc thông dịch tùy theo mỗi ngôn ngữ lập trình
1.1 Cơ chế Biên Dịch:
Mã văn bản chơng trình nguồn đợc dịch sang một dạng mã trung gian sau đó mã trung gian sẽ đợc dịch xuống mã máy và mã máy sẽ đợc thực thi bởi Control Process Unit (CPU) Tiêu biểu cho loại này là công nghệ Dot Net
Source Code
(Mã nguồn)
Front-End (Analysis)
Immediate Code (Mã trung gian)
JIT (Just – In - Time)
Back – End (Synthesis)
Trang 52 Giới Thiệu Văn Phạm Automat:
2.1 Khái niệm Văn Phạm:
Văn phạm là một tập hợp các ký hiệu đợc sắp xếp theo một trình tựnhất định có những ý nghĩa nhất định
Một văn phạm thờng đợc bao gồm bởi các tập ký hiệu < V, T, S, P >
Trong đó:
+ V là tập các ký hiệu cha kết thúc (Variable)
+ T là tập các ký hiệu kết thúc (Terminal)
+ S là ký hiệu xuất phát của một văn phạm (Start)
+ P là tập luật sinh (Production)
áp dụng luật sinh
Dạng của luật sinh:
sou rce cod e
(Mó n guồn )
Front – End (Analysis)
Immediate Code (Mó Trung Gian)
Compiler
Process By JVM (Java Virtual Machine)
Trang 6<Chuỗi ký hiệu cha kết thúc> <Chuỗi ký hiệu kết thúc hoặc cha kếtthúc>
Ví dụ: Ta có tập luật sinh:
- Bộ phận đọc dữ liệu(Data) từ một tập tin vào (một chuỗi các ký hiệu
và không sửa đổi) đọc mỗi lần một ký hiệu
- Vùng nhớ tạm, lu chữ các ký hiệu(nội dung có thể thay đổi đợc)
- Đơn vị điều khiển:
+ Có trạng thái nội tại thuộc tập trạng thái hữu hạn
+Trạng thái thay đổi theo hàm chuyển trạng thái
- Trạng thái hiện tại của đơn vị điều khiển
- Ký hiệu hiện tại
- Thông tin hiện tại trong vùng nhớ tạm
- Số trạng thái <= 2* (Số biểu thức con)
- Tại một trạng thái không có nhiều cạnh ra có cùng nhãn (tức
3 Khái Quát Chơng Trình:
Chơng trình đợc xây dựng hết sức đơn giản, dựa trên cơ chế trình thôngdịch Chơng trình sẽ thông dịch ngay trên mã nguồn mà không dịch ra mộtngôn ngữ trung gian nào
Soure Code (Mã nguồn) Compile and Interpreter
Trang 7
Trình biên dịch đợc xây dựng là một trình thông dịch.Khi chơng trìnhthực thi, toàn bộ văn bản chơng trình nguồn sẽ đợc nạp vào bộ nhớ.Trìnhbiên dịch phân biệt chữ hoa và chữ thờng.Trong quá trình biên dịch chơngtrình sẽ dừng lại ngay khi gặp lỗi
Báo lỗi khi câu lệnh nhập không đúng cú pháp (không thỏa
cú pháp của tập luật sinh)
- Bộ xử lý ngữ nghĩa
Đánh giá biểu thức câu lệnh nhập, xử lý ngữ nghĩa câu lệnhnhập đúng cú pháp (cho ta biết kết quả cuối cùng của mộtcâu lệnh nhập)
Chơng 2: Bộ Phân Tích Từ Vựng
1 Vai trò và nhiệm vụ:
- Là pha đầu tiên của trình biên dịch Giao tiếp trực tiếp với văn bản
ch-ơng trình nguồn
- Nhiệm vụ chính là phân tích văn bản nguồn thành các token
- Bỏ qua các ký tự khoảng trắng, ghi chú
- Tập hợp các thông tin từ văn bản nguồn cần cho quá trình tiếp theo
2 Mô hình hoạt động:
Văn Bản Ch ơng Trình Nguồn (Source Code)
Bộ Phân Tích
Từ Vựng (Lexeme Analysis)
Bộ Phân Tích
Bảng Danh Hiệu (Identify Table)
Yêu cầu
Token kế tiếp Định nghĩa token
Trang 8Mô Hình Hoạt Động Của Bộ Phân Tích Từ Vựng
3 Phát hiện và xử lý lỗi:
Có thể sử dụng các cơ chế sau:
- Báo sai và ngng chơng trình
- Báo sai và tìm vị trí thích hợp để tiếp tục quá trình phân tích
- Báo sai thêm sửa để tiếp tục quá trình phân tích
biểu thức chính quy ban đầu : r
- Tạo biểu thức chính quy gia tố: r#
- Xây dựng cây cú pháp với biểu thức chính quy gia tố r#
-Nút lá a thuộc: Σ, λ, #
-Nút trung gian: |, λ, *
- Đánh số cho các nút lá: #, λ (thể hiện cho vị trí)
- Xác định giá trị các hàm: Nullable(N) , FirstPosition(N) ,LastPosition(N), FollowPosition(p)
- Nullable(N) trả về giá trị True nếu biểu thức chính quy tơng ứng
có nút gốc lá N có thể sinh ra chuỗi rỗng và ngợc lại trả về giá trịFalse
- FirstPos(N) là tập các vị trí có thể so trùng với ký hiệu đầu của chuỗi
đợc sinh ra bởi biểu thức chính quy tơng ứng với cây biểu thức gốc N
- LastPos(N) là tập các vị trí có thể so trùng với ký hiệu cuối của chuỗi
đợc sinh ra bởi biểu thức chính quy tơng ứng với cây biểu thức gốc N
- FollowPos(p) là tập các vị trí có thể so trùng với ký hiệu tong ứng với
vị trí p trong chuỗi
Trang 9•
N1 N2
Nullable(N1) and
Nullable(N2)
If(Nullable(N1)) FirstPos(N1)+
FirstPos(N2) Else
FirstPos(N1)
If(Nullable(N2)) LastPos(N1)+
LastPos(N2) Else
LastPos(N2)
FollowPos(i)= FirstPos(N2) với i ∈
LastPos(N1)
* |
N True FirstPos(N) LastPos(N)
FollowPos(i)= FirstPos(N) với i ∈
p ∈S,p → a
Dstate = Dstate + {U};
Dstate [S] [a] = U;
} }
6 Xây dựng bộ phân tích từ vựng:
6.1 Xây dựng vùng đệm nhập:
Vùng đệm nhập là một cấu trúc dữ liệu là nơi để nạp văn bản chơngtrình nguồn vào bộ nhớ, ta có thể hiện thực Vùng Đệm Nhập nh sau:
- sử dụng biến beginning trỏ đến đầu chuỗi đang phân tích
- khởi tạo biến forward = beginning
- Sau mỗi lần đọc một ký hiệu tăng forward lên 1
Trang 10Bảng Danh Hiệu (Identify Table) là một cấu trúc dữ liệu lu trữ thôngtin liên quan đến danh hiệu nh nội dung của danh hiệu, loại danh hiệu (sốhay chuỗi), kiểu của danh hiệu( số nguyên hay số thực) v v
Bảng danh hiệu phải đợc tổ chức sao cho thao tác dò tìm có hiệu quảnhanh nhất cả về mặtthời gian và mặt xử lý.Tiết kiệm vùng nhớ,dễ mở rộngkhi cần thiết
Ta có thể tổ chức Bảng Danh Hiệu theo bảng Tuyến Tính hoặc bảngBăm hay một dạng cấu trúc dữ liệu khác hiệu quả hơn
Các thao tác trên Bảng Danh Hiệu:
- Dò tìm một danh hiệu (position lookup) trả về vị trí của danh hiệu đótrong Bảng Danh Hiệu nếu tìm thấy ngợc lại nếu không tìm thấy trả vềmột vị trí bất hợp lệ
- Thêm danh hiệu vào Bảng Danh Hiệu, mở rộng Bảng Danh Hiệu nếu
đầy phần tử
- Các thao tác liên quan đến vấn đề tầm vực : Sau khi xây dựng đợcbảng danh hiệu thì công việc đầu tiên là phải khởi tạo bảng danh hiệu.Lấp đầy các từ khóa theo ngôn ngữ định trớc ứng với mỗi loại từ khóaứng với một loại token Ví dụ “if” tơng ứng với loại token “IF” với mỗidanh hiệu thì loại token tơng ứng là “ID”
Ta định nghĩa các toán tử logic nh sau:
Relation operator Comment
Trang 111 Giíi ThiÖu chung vÒ bé ph©n tÝch có ph¸p
1.1 Vai trß vµ nhiÖm vô:
i3 i5 i2
i6 i8 i9 7
4
1 0
Return (–<–, –LT–)
Return (–>=–, –GE–)
3
i1 2
i1 1
1 0
!
other
=
Return (–!–, –NOT–)
Return (–!=–, –NE–)
Return (id, –ID–)
other
letter
Letter |Digit
Digit
Trang 12Là pha thứ hai giao tiếp với bộ phân tích từ vựng Nhận chuỗi token,kiểm chứng các token đợc sắp xếp theo đúng trật tự cú pháp đã định Kếthợp với quá trình xử lý ngữ nghĩa Báo lỗi khi sai.
Kết quả quá trình phân tích là cây cú pháp
1.2 Phân loại Văn Phạm:
Văn phạn tuyến tính:
Là văn phạm mà luật sinh có dạng:
A → x B hay A → Bx hay A → xVăn phạm phi ngữ cảnh:
Là văn phạm mà luật sinh có dạng:
A → W với W ∈ (V + T)
1.3 Cây dẫn xuất:
- Nút gốc có nhãn trùng với ký hiệu xuất phát của văn phạm
- Nút lá có nhãn trùng với ký hiệu ∈ T + λ ( λ ký hiệu rỗng)
- Nút trung gian có nhãn trùng với ký hiệu thuộc V
- Nếu A → x1x2…xn ∈ P thì nút có nhãn A sẽ có các nút con lần lợt làx1, x2 … n ( từ trái sang phải )
1.4 Khái niệm về câu, dạng câu:
- Câu: là chuỗi các ký hiệu kết thúc (∈T )
- Dạng câu: là chuỗi các ký hiệu kết thúc và cha kết thúc (∈ T + V)
1.5 Thiết kế văn phạm:
Cú pháp của các ngôn ngữ lập trình có thể đợc đặc tả bởi các vănphạm phi ngữ cảnh
1.5.1 Văn phạm đệ quy trái trực tiếp:
Văn phạm đệ quy trái trực tiếp là văn phạm có sự trùng lắp giữa giátrị vế trái của câu dẫn xuất với giá trị đầu tiên bên phải của câu dẫn xuất
A’ → a1A’ | a2A’ | … | anA’ λ}
}
ví dụ:
Trang 13ta có tập luật sinh P: A → AC | Aad | bd | λ
ta khử đệ quy trái trực tiếp nh sau:
P:
A → bdA’ | λA’
A’ → CA’ | adA’ | λ
1.5.2 Văn phạm đệ quy trái gián tiếp:
Văn phạm đệ quy trái gián tiếp là văn phạm có câu dẫn xuất mà vếtrái của câu dẫn xuất trùng với giá trị đầu tiên của vế phải câu dẫn xuất quanhiều câu dẫn xuất
Ví dụ:
P: S →Aa | b (1)
A → AC | Sd | λ (2) (có sự trùng lắp giá trị S).Giải thuật khử đệ quy trái gián tiếp:
- Sắp xếp các ký hiệu cha kết thúc theo thứ tự A1, A2 … An
Ai → C1b | C2b | … | Cnbvới Aj → C1 | C2 | … | Cnkhử đệ quy trái trực tiếp
}}
S → Aa | b
A →AC | Aad | bd | λ
Ta tiếp tục khử đệ quy trái trực tiếp của
A → AC | Aad | bd | λ
Trang 141.5.3 Văn phạm yếu tố trái:
Văn phạm yếu tố trái là văn phạm có câu dẫn xuất mà có sự trùng lắp
giữa vế trái của câu dẫn xuất với giá trị cuối cùng của vế phải câudẫn xuất
Ví dụ:
P: D → L : T ; D | L : T; (có sự trùng lắp D)
T → i | f
L → id , L | id (có sự trùng lắp L)
- Thuật toán khử trùng lắp yếu tố trái nh sau:
Thay A → aB1 | aB2 | … | aBn
T → i | f
L → id L’ ( nhóm id làm thừa số chung )L’ → , L | λ
2 Bộ Phân Tích Cú Pháp Đoán Nhận Trớc Không Đệ Quy
2.1 Nguyên tắc phân tích:
- Yêu cầu văn phạm không đệ quy trái trực tiếp hay gián tiếp Nếu vănphạm đệ quy trái thì khử đệ quy trái
- Yêu cầu văn phạm không có yếu tố trái Nếu văn phạm có yếu
tố trái thì khử yếu tố trái
Bảng Phân Tích M Stack
Xuất
Trang 15- Vùng Đệm Nhập: chứa văn bản chơng trình cần phân tích Kết thúcvùng đệm nhập chứa ký hiệu $ ( $ ∈T ), ký hiệu kết thúc.
- Stack chứa dạng câu của văn phạm trong quá trình phân tích ĐáyStack chứa ký hiệu $
M [x, a] = x →y1y2…yn loại x khỏi Stack lần
l-ợt đa vào Stack các giá trị yn, yn-1 … y1
nếu:
M [A, a] = ∅ báo lỗi sai
Giải thuật xử lý bộ điều khiển:
pop (x);
a = GetNextToken ( );
}else if ( x ∈ V ){
if ( M [x, a] = = x → y1y2 … yn ){
pop (x);
Trang 16for ( i=n to 1 ){
push ( yi );
}}
else{
error ( );
}}
2.3.1 Xác định tập First của các ký hiệu cha kết thúc
Giải thuật xác định tập First:
i First (A) = { A } nếu A ∈T
ii nếu A →λ thì First (A) = First (A) + { λ}
iii nếu A →y1y2 … yn thì
First (A) = First (A) + ( First (y1) – { λ } );
2.3.2 Xác định tập Follow của các ký hiệu cha kết thúc
Giải thuật xác định tập Follow:
i Follow (S) = { $ } nếu S là ký hiệu xuất phát của văn phạm
ii nếu X → aAB thì Follow (A) = Follow (A) +(First(B) - {λ }) iii nếu X → aA hay (X → aAB và λ ∈ First(B))
thì Follow (A) = Follow (A) + Follow(X)
2.3.3 Giải thuật xây dựng bảng M:
for ( A € V , a € T)
{
M [A, a] = {};
Trang 17for ( b ∈ (T + { $ }) && b ∈ Follow (A)){
M [A, b] = { A → B};
}}
}
2.3.4 Vấn đề xử lý lỗi:
Trong quá trình phân tích nếu gặp lỗi thì bỏ qua các ký hiệu kế tiếp cho
đến khi gặp ký hiệu thuộc tập ký hiệu đồng bộ thì tiếp tục quátrình phân tích
Ta thấy văn phạm đệ quy trái trực tiếp ở câu dẫn xuất (1) (3)
khử đệ quy trái trực tiếp ta đợc:
Trang 18áp dụng giải thuật xác định tập First cho các ký hiệu cha kết thúc ta có:
Trang 19+ Push ( $ ); (đáy Stack luôn chứa giá trị $)+ Push ( E );(E là ký hiệu xuất phát của văn phạm)
Từ bảng phân tích ta xây dựng đợc cây cú pháp nh sau:
Error: Reference source not found
Sơ Đồ Cây Cú Pháp
Trang 203 Bộ Phân Tích Cú Pháp Thứ Tự Yếu
3.1 Nguyên tắc phân tích:
Đây là dạng phân tích cú pháp từ dới lên Xuất phát từ câu nhập, ápdụng lần lợt các luật sinh để thu giảm câu nhập về ký hiệu xuất phát củavăn phạm có nghĩa là quá trình phân tích bắt đầu từ các nút lá của cây dẫnxuất đi dần lên đến nút gốc (từ dới lên) Quá trình thu giảm đợc thực hiệntheo cách thức:
- Quét chuỗi nhập từ trái sang phải Xác định chuỗi con trùng với vếphải của tập một luật sinh
- Thay chuỗi con tìm đợc bởi ký hiệu vế trái của luật sinh tơng ứng
3.2 Mô Hình Hoạt Động:
Error: Reference source not found
Mô Hình Bộ Phân Tích Cú Pháp Thứ Tự Yếu
- Stack nhập (vùng đệm nhập): chứa chuỗi nhập, ký hiệu tận cùng là $.
- Stack trạng thái: chứa các ký hiệu văn phạm đáy stack là ký hiệu $(khởi đấu stack trạng thái là rỗng chỉ chứa ký hiệu $)
- Tập luật sinh: chứa các luật sinh của văn phạm
- Bảng phân tích: cho biết hành vi tơng ứng khi biết ký hiệu trên đỉnhstack trạng thái và ký hiệu trên đỉnh stack nhập:
M [A, a] = action
Action có thể là Shift hoặc Reduce
A: là ký hiệu trên đỉnh Stack trạng thái
M [A, a] = Shift : Đẩy a sang stack trạng thái Có nghĩa là lấy a khỏistack nhập đa a sang stack trạng thái
M [A, a] = Reduce: Xác định luật sinh có vế phải trùng dạng câu ởphía đỉnhu Stack trạng thái Thay dạng câu tơng ứng bởi ký hiệu vế trái củaluật sinh
M [A, a] = {} (rỗng) Báo lỗi sai
Hành vi Shift giúp hoàn chỉnh vế phải của một luật sinh
Hành vi Reduce , khi một luật sinh đợc hoàn chỉnh thì thay vế phải bởi
vế trái
Nếu đạt đến điều kiện stack trạng thái chỉ có một ký hiệu là ký hiệuxuất phát của văn phạm và ký hiệu đáy stack nhập là $ thì quá trình phântích thành công có nghĩa là chuỗi nhập đúng với văn phạm của ngôn ngữhay câu lệnh nhập viết đúng cú pháp
Trang 21- X < Y → có nghĩa là có tồn tại luật sinh có vế phải là aXAb và thựchiện hành vi Shift Y sang stack trạng thái để hoàn chỉnh dần vế phải củaluật sinh ( X ≤ Y thực hiện hành vi Shift).
- X > Y→ có nghĩa là có tồn tại luật sinh có vế phải là aABb và lúcnày phía đỉnh stack trạng thái đã có đầy đủ vế phải của một luật sinh có kýhiệu vế trái là A và lúc này thực hiện hành vi thu giảm ( Reduce ) về A
X > Y
X → Z1Z2…Zn
3.3.3 Giải thuật xây dựng Bảng Phân Tích M:
- khởi tạo bảng hai chiều M là rỗng
- for (A ∈ V + T + { $} )
{
for ( a ∈ T + {$} ){
if ( A ≤ a ) {
M [A, a] = M [A, a] + {$} ;}
=> X ≤ Z1
=> Zn > Y
=> X > Z1
=> Zn > Y
Trang 22if ( A > a ) {
M [A, a] = M [A, a] + {Reduce} ;}
}}
Việc xác định dạng câu phía đỉnh stack trùng với vế phải của một luậtsinh (trong hành vi thu giảm) thờng rất phức tạp
- trờng hợp có nhiều luật sinh có cùng vế phải thì không xác định
đ-ợc luật sinh sử dụng (trong hành vi thu giảm)
- trờng hợp phần tử trong Bảng phân tích chứa nhiều hành vi thìkhông xác định đợc nên chọn hành vi nào
T ≤ *
* ≤ F( ≤ E
E ≤ )
$ ≤ id
= ≤ T , = ≤ F , = ≤ id , = ≤ (+ ≤F , + ≤ id , + ≤ (
* ≤ id , * ≤ (( ≤ T , ( ≤ F , ( ≤ id , ( ≤ (
A > $