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
Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!