Giáo trình Chương trình dịch - Bài 5: Bộ phân tích từ vựng - Nguyễn Thị Thu Hương

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ằng. . . 11 „ Kiểu dữ liệu „ Phạm vi sử dụng „ Địa chỉ vùng nhớ,kích cỡ vùng nhớ

pdf4 trang | Chia sẻ: huongthu9 | Lượt xem: 318 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Giáo trình Chương trình dịch - Bài 5: Bộ phân tích từ vựng - Nguyễn Thị Thu Hương, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
21/1/2010 1 Bài 5 Bộ phân tích từ vựng 1 Nhiệm vụ của bộ phân tích từ vựng „ Phát hiện các từ tố 2 „ 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 Từ tố có cấu trúc cú pháp 3 „ Tại sao không xử lý các luật này trong giai đoạn phân tích 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 biệt tên và từ khoá 4 …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 . . . .) 21/1/2010 2 Các từ tố của KPL „ 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ự Dấ hé t á 5 „ u p p o n: … số học + - */ … so sánh = != = „ Dấu phân cách ( ) . : ; (. .) „ Dấu phép gán := Ôtômat hữu hạn của bộ PTTV 6 Sau mỗi từ tố được nhận biết, bộ từ vựng lại quay lại trạng thái s0 Xử lý các loại từ tố switch(state) { case 0 // Bỏ qua khoảng trống case 1// Xử lý các phép toán quan hệ 7 case 10 // Xử lý tên case 13 // Xử lý số . . . } Các phép toán quan hệ case 0 : c= nextchar(); if(c==blank || c= =tab || c= =newline ){ state = 0; lexeme_beginning++; //chuyển con trỏ đến đầu từ tố) } case 1: 8 if(c= = '<') state = 1a; else if (c= = '=') state = 4; else if (c= = ‘!') state = 5; else if (c= = ‘>') state = 7; else state =fail();break; case 1a: c:=nextchar(); if (c= = '=') state = 2; Else state=3; case 2: return (leq) 21/1/2010 3 Số nguyên case 13: c = nextchar(); if(isdigit(c)) state = 14; case 14: c=nextchar(); 9 if(isdigit(c)) state = 14; else state = 15; break; case 15 : retract(1); install_num(); return(num); Định danh case 10: c = nextchar(); if(isletter(c)) state =11; else state = fail; break; 10 case 11: c = nextchar(); if(isletter(c)) state =11; else if (isdigit(c)) state = 11; else state = 12; break; case 12: retract(1) ; install_id(); return (gettoken()); Các thông tin trong bảng ký hiệu „ 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ằng. . . 11 „ Kiểu dữ liệu „ Phạm vi sử dụng „ Địa chỉ vùng nhớ,kích cỡ vùng nhớ „ . . . Xử lý tên / từ khoá 12 21/1/2010 4 Cấu trúc dữ liệu enum symbol { nul, ident, number, plus,minus, times, slash, eql,neq, lss,leq,grt,geq, 13 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 };

Các file đính kèm theo tài liệu này:

  • pdfgiao_trinh_chuong_trinh_dich_bai_5_bo_phan_tich_tu_vung_nguy.pdf