- Xõu thường được biểu diễn bằng cỏc chữ cỏi Latinh cuối bảng viết thường (x, y, z, ).
2.2.1. Lập bộ phõn tớch từ vựng bằng phương phỏp diễn giải đồ thị chuyển.
Đoạn chương trỡnh mụ tả việc nhận dạng từ tố bằng cỏch diễn giải đồ thị chuyển.
Chỳng sẽ sử dụng cỏc hàm sau:.
int IsDigit ( int c); // hàm kiểm tra một ký hiệu là chữ số int IsLetter ( int c); // hàm kiểm tra một ký hiệu là chữ cỏi int GetNextChar(); // hàm lấy ký tự tiếp theo
enum Token {IDENT, INTEGER, REAL, LT, LE, GT, GE, NE, EQ, ERROR}; // hàm này trả về loại từ tố // từ vị nằm trong s Token GetNextToken(char *s) {int state=0; int i=0; while(1) { int c=GetNextChar(); switch(state)
else if(IsDigit(c)) state=3; else if(c==‘<’) state=7;
else if(c==‘=’) state=11; else if(c==‘>’) state=12;
else return ERROR; s[i++]=c;
break;
case 1: if(IsLetter(c)||IsDigit(c)) state=1; else return ERROR;
break;
case 2: s[i]=0; GetBackChar(); return IDENT;
case 3: if(IsLetter(c)) state=4; else if(IsDigit(c)) state=3; else if(c==‘.’) state=5;
else return 4; s[i++]=c; break;
case 4: s[i]=0; GetBackChar(); return INTEGER;
case 5: if(IsDigit(c)) state=5; else state=6;
s[i++]=0; break;
case 6: s[i]=0; GetBackChar(); return REAL;
case 7: if(c==‘=’) state=8; else if(c==‘>’) state=9; else state=10; s[i++]=c; break; case 8: s[i]=0; return LE; case 9: s[i]=0; return NE;
case 10: s[i]=0; GetBackChar(); return LE;
case 11: s[i]=0; return EQ;
case 12: if(c==‘=’) state=13; else state=14; s[i++]=c; break; case 13: s[i]=0; return GE; case 14: s[i]=0; return GT; } if(c==0) break; }// end while }// end function Nhận xột:
Ưu điểm: chương trỡnh dễ viết và trực quan đối với số lượng cỏc loại từ tố là bộ.
Nhược điểm: gặp nhiều khú khăn nếu số lượng loại từ tố là lớn, và khi cần bổ sung loại từ tố hoặc sửa đổi mẫu từ tố thỡ chỳng ta lại phải viết lại chương trỡnh.
Chỳ ý: Trong thực tế khi xõy dựng bộ phõn tớch từ vựng, chỳng ta phải nhận dạng cỏc tờn trong chương trỡnh trỡnh nguồn, sau đú dựa vào bảng lưu trữ để phõn biệt cụ thể cỏc từ khoỏ đối với cỏc tờn.