Thiết kế trình biên dịch - Phân tích từ vựng

Phân tích từ vựng là giai đoạn đầu tiên của trình biên dịch. Nó lấy mã nguồn sửa đổi từ các bộ tiền xử lý ngôn ngữ được viết dưới dạng câu. Trình phân tích từ vựng chia các cú pháp này thành một loạt mã thông báo, bằng cách loại bỏ bất kỳ khoảng trắng hoặc chú thích nào trong mã nguồn.

Nếu trình phân tích từ vựng tìm thấy mã thông báo không hợp lệ, nó sẽ tạo ra lỗi. Bộ phân tích từ vựng hoạt động chặt chẽ với bộ phân tích cú pháp. Nó đọc các luồng ký tự từ mã nguồn, kiểm tra các mã thông báo hợp pháp và chuyển dữ liệu đến trình phân tích cú pháp khi nó yêu cầu.

Token

Lexemes được cho là một chuỗi các ký tự (chữ và số) trong một mã thông báo. Có một số quy tắc được xác định trước để mọi lexeme được xác định là mã thông báo hợp lệ. Các quy tắc này được xác định bởi các quy tắc ngữ pháp, bằng một khuôn mẫu. Một mẫu giải thích những gì có thể là một mã thông báo và những mẫu này được xác định bằng các biểu thức chính quy.

Trong ngôn ngữ lập trình, các từ khóa, hằng số, định danh, chuỗi, số, toán tử và ký hiệu dấu chấm câu có thể được coi là mã thông báo.

Ví dụ, trong ngôn ngữ C, dòng khai báo biến

int value = 100;

chứa các mã thông báo:

int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).

Thông số kỹ thuật của Token

Hãy để chúng tôi hiểu cách lý thuyết ngôn ngữ thực hiện các thuật ngữ sau:

Bảng chữ cái

Bất kỳ bộ ký hiệu hữu hạn nào {0,1} là một bộ bảng chữ cái nhị phân, {0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F} là một tập hợp các bảng chữ cái Hệ thập lục phân, {az, AZ} là một tập hợp các bảng chữ cái tiếng Anh.

Dây

Bất kỳ chuỗi hữu hạn nào của bảng chữ cái được gọi là một chuỗi. Độ dài của chuỗi là tổng số lần xuất hiện của các bảng chữ cái, ví dụ: độ dài của chuỗi hướng dẫn là 14 và được ký hiệu là | tutorialspoint | = 14. Một chuỗi không có bảng chữ cái, tức là một chuỗi có độ dài bằng 0 được gọi là chuỗi rỗng và được ký hiệu là ε (epsilon).

Ký hiệu đặc biệt

Một ngôn ngữ cấp cao điển hình chứa các ký hiệu sau: -

Biểu tượng số học Phép cộng (+), Phép trừ (-), Modulo (%), Phép nhân (*), Phép chia (/)
Chấm câu Dấu phẩy (,), Dấu chấm phẩy (;), Dấu chấm (.), Mũi tên (->)
Chuyển nhượng =
Nhiệm vụ đặc biệt + =, / =, * =, - =
So sánh ==,! =, <, <=,>,> =
Bộ tiền xử lý #
Công cụ xác định vị trí &
Hợp lý &, &&, |, ||,!
Người điều hành Shift >>, >>>, <<, <<<

Ngôn ngữ

Một ngôn ngữ được coi là một tập hợp hữu hạn các chuỗi trên một số tập hợp các bảng chữ cái hữu hạn. Các ngôn ngữ máy tính được coi là tập hợp hữu hạn và các phép toán tập hợp toán học có thể được thực hiện trên chúng. Các ngôn ngữ hữu hạn có thể được mô tả bằng các biểu thức chính quy.

Quy tắc đối sánh dài nhất

Khi bộ phân tích từ vựng đọc mã nguồn, nó sẽ quét từng ký tự mã; và khi nó gặp một khoảng trắng, ký hiệu toán tử hoặc các ký hiệu đặc biệt, nó quyết định rằng một từ đã được hoàn thành.

For example:

int intvalue;

Trong khi quét cả hai từ vựng cho đến 'int', bộ phân tích từ vựng không thể xác định liệu đó là từ khóa int hay các chữ cái đầu của giá trị int của mã định danh.

Quy tắc đối sánh dài nhất quy định rằng lexeme được quét phải được xác định dựa trên trận đấu dài nhất trong số tất cả các mã thông báo có sẵn.

Máy phân tích từ vựng cũng theo sau rule prioritytrong đó một từ dành riêng, ví dụ, từ khóa, của một ngôn ngữ được ưu tiên hơn so với đầu vào của người dùng. Nghĩa là, nếu bộ phân tích từ vựng tìm thấy một lexeme khớp với bất kỳ từ dành riêng nào hiện có, nó sẽ tạo ra lỗi.