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 (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]
- Đọ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, Go và Ruby.
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 C và C++.
- Compiling with C# and Java, Pat Terry, 2005, ISBN 032126360X624
- Algorithms + Data Structures = Programs, Niklaus Wirth, 1975, ISBN 0-13-022418-9
- Compiler Construction, Niklaus Wirth, 1996, ISBN 0-201-40353-6
- Sebesta, R. W. (2006). Concepts of programming languages (Seventh edition) pp. 177. Boston: Pearson/Addison-Wesley.
- Word Mention Segmentation Task analysis page
- On the applicability of the longest-match rule in lexical analysis
Comments
Post a Comment