1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

44 442 5

Đ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 44
Dung lượng 509,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đ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 1

Lờ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 2

Chơ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 3

5 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 4

1 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 5

2 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 8

Mô 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 10

Bả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 11

1 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 12

Là 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 13

ta 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 14

1.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 16

for ( 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 17

for ( 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 20

3 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 22

if ( 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 > $

Ngày đăng: 15/12/2015, 08:25

HÌNH ẢNH LIÊN QUAN

Bảng Danh Hiệu (Identify Table) - 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
ng Danh Hiệu (Identify Table) (Trang 7)
Bảng Danh Hiệu (Identify Table) là một cấu trúc dữ liệu lu trữ thông tin 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.. - 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
ng Danh Hiệu (Identify Table) là một cấu trúc dữ liệu lu trữ thông tin 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 (Trang 10)
Bảng Phân Tích MStack - 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
ng Phân Tích MStack (Trang 14)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w