Phân tích từ vựng

Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm
Quá trình phân tích từ vựng trong các giai đoạn xử lý.

Trong ngành khoa học máy tính, phân tích từ vựng (en:Lexical Analysis, còn được gọi là scanning hoặc lexing) là một quá trình chuyển đổi chuỗi ký tự nguồn thành một chuỗi liên tiếp các đoạn ký tự ngắn hơn đã được phân loại, gọi là tokens. Chương trình dùng để phân tích từ vựng được gọi là bộ phân tích từ vựng (tiếng Anh là Lexer).

Token[sửa | sửa mã nguồn]

Token (dấu hiệu) tương tự như loại từ trong ngôn ngữ học. Tương tự như danh từ hay tính từ, động từ, token sẽ được định nghĩa gồm từ khóa (keyword), định danh (identifier), số nguyên, số chấm động tùy theo đặc điểm của trình biên dịch.

Để biểu diễn các tokens, người ta dùng biểu thức chính quy.

a: có xuất hiện ký tự 'a'
ab: có xuất hiện ký tự 'b' theo sau ký tự 'a' (theo đúng thứ tự)
a|b: có 'a' hoặc có 'b'
a*: xuất hiện nhiều hoặc không xuất hiện ký tự 'a'
a+: xuất hiện nhiều hoặc ít nhất là một ký tự 'a'
a3: xuất hiện 3 ký tự a
a?: xuất hiện a hoặc không xuất hiện

Dựa vào các ký hiệu, chúng ta có thể biểu diễn biểu thức chính quy của một số nguyên bất kỳ như sau:

digits = '0' | '1' | '2' | '3' | '4 | '5' | '6' | '7' | '8' | '9'
integer = '−'?(digits)+

Các nhiệm vụ của quá trình phân tích từ vựng[sửa | sửa mã nguồn]

Quá trình phân tích từ vựng tạo ra các dấu hiệu (token) cho bước phân tích cú pháp tiếp theo.
  • Đọc các kí tự đầu vào
  • Phát sinh các chuỗi dấu hiệu (token) đầu ra
  • Bỏ khoảng trắng, cách dòng, tab
  • Ghi lại vị trí các dấu hiệu được dùng cho bước xử lý tiếp theo.

Các công cụ phát sinh mã phân tích từ vựng[sửa | sửa mã nguồn]

  • ANTLR - ANTLR phát sinh cú pháp predicated-LL(k).
  • Flex - Biến thể thay thế của dạng cổ điển "lex" (C/C++).
  • JFlex - Viết lại của JLex.
  • Ragel - Máy quét từ vựng hỗ trợ đầu ra cho mã nguồn C, C++, C#, Objective-C, D, Java, GoRuby.

Các công cụ phát sinh có thể xử lý Unicode:

  • JavaCC - JavaCC phát sinh phân tích từ vựng viết trong Java.
  • JLex - Công cụ phát sinh phân tích từ vựng dành cho Java.
  • Quex (hoặc "Queχ") - Công cụ phát sinh phân tích từ vựng nhanh cho CC++.

Xem thêm[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]