Slide Chương trình dịch (UNIT5) - GV Nguyễn Thị Thu Hương

LI
lienhejb
0 lượt tải
4
0

Nội dung tài liệu

Trang 1

21/1/2010 Nhiệm vụ của bộ phân tích từ vựng „ Phát hiện các từ tố Bài 5 BBộộ pphânhân ttíchích ttừừ vvựựnngg „ Bỏ qua các ký tự không cần thiết … Khoảng trống … Dấu tab … Ký tự xuống dòng (CR,LF) … Chú thích 1 2 Từ tố có cấu trúc cú pháp Xử lý các luật từ vựng trong bộ phân tích cú pháp ? „ Làm cho bộ phân tích cú pháp trở nên quá phức tạp ……Phân biPhân biệệt tên và tt tên và từừ khoákhoá …Phải có những luật phức tạp để xử lý chuỗi các ký tự không cần thiết (khoảng trống, tab, chú thích . . . .) „ Tại sao không xử lý các luật này trong giai đoạn phân tích cú pháp ? 3 4 goupee.com fb.com/groups/goupee 1

Trang 2

21/1/2010 Các từ tố của KPL Ôtômat hữu hạn của bộ PTTV „ Số nguyên „ Định danh „ Từ khóa: begin,end, if,then, while, do, call, const, var, procedure, program,type, function,of,integer,char,else,for, to,array „ Hằng ký tự „ DDấấu phéhép t átoán: … số học + - */ … so sánh = != < > <= >= „ Dấu phân cách ( ) . : ; (. .) „ Dấu phép gán := Sau mỗi từ tố được nhận biết, bộ từ vựng lại quay lại trạng thái s0 5 6 Xử lý các loại từ tố Các phép toán quan hệ case 0 : c= nextchar(); switch(state) if(c==blank || c= =tab || c= =newline ){ state = 0; { lexeme_beginning++; //chuyển con trỏ đến đầu từ tố) case 0 // Bỏ qua khoảng trống } case 1// Xcase 1// Xửử lý các phép toán quan hlý các phép toán quan hệệ case 1: if(c= = '<') state = 1a; case 10 else if (c= = '=') state = 4; // Xử lý tên else if (c= = ‘!') state = 5; else if (c= = ‘>') state = 7; case 13 else state =fail();break; // Xử lý số case 1a: c:=nextchar(); if (c= = '=') state = 2; . . . Else state=3; } case 2: return (leq) 7 8 goupee.com fb.com/groups/goupee 2

Trang 3

21/1/2010 Số nguyên Định danh case 13: c = nextchar(); case 10: c = nextchar(); if(isdigit(c)) state = 14; if(isletter(c)) state =11; case 14: ccase 14: c nextchar();=nextchar(); else state = fail; break; case 11: if(isdigit(c)) state = 14; c = nextchar(); else state = 15; break; if(isletter(c)) state =11; case 15 : retract(1); else if (isdigit(c)) state = 11; else state = 12; break; install_num(); case 12: retract(1) ; return(num); install_id(); return (gettoken()); 9 10 Các thông tin trong bảng ký hiệu Xử lý tên / từ khoá „ Tên: xâu ký tự „ Thuộc tính: tên kiểu,tên biến, tên thủ tục, tên hằngg. . . „ Kiểu dữ liệu „ Phạm vi sử dụng „ Địa chỉ vùng nhớ,kích cỡ vùng nhớ „ . . . 11 12 goupee.com fb.com/groups/goupee 3

Trang 4

21/1/2010 Cấu trúc dữ liệu enum symbol { nul, ident, number, plus,minus, times, slash, eql,neq, lss,leq,grt,geq,eql,neq, lss,leq,grt,geq, lparen, rparen, comma, semicolon, period, becomes, quote, colon, lsquare,rsquare, beginsym, endsym, ifsym,thensym, whilesym,dosym, callsym,constsym,varsym,procsym,programsym,typesym, funcsym,ofsym,integersym,charsym,elsesym,forsym, tosym, arraysym }; 13 goupee.com fb.com/groups/goupee 4

Hiển thị 4 trang đầu. Tải tài liệu để xem đầy đủ.

Bình luận (0)

Đăng nhập để tham gia bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!