Tôi đang thực hiện một phân tích từ vựng cơ bản trong Java
cho dự án học kỳ của tôi và tôi xung đột về một khái niệm với giáo viên môn học của tôi.Có phải chuỗi "1a" là lỗi cho máy phân tích từ vựng hay không?
Quan điểm của tôi là nói chung nếu một đầu vào như "1a" được trao cho phân tích từ vựng sau đó nó sẽ cho đầu ra như:
"<Number><Identifier>"
Nhưng, giáo viên của tôi nói rằng nó nên lá cờ này như là một lỗi bởi vì thay vì xử lý nó như là một số và một định danh nó nên gắn cờ toàn bộ chuỗi (tức là "1a") như là một error.This là bởi vì (như ông nói) định danh không thể bắt đầu với một số.
Ngược lại, tôi nghĩ rằng đây phải là trách nhiệm của giai đoạn tiếp theo của trình biên dịch (trình phân tích cú pháp) để quyết định xem có điều gì đó là một định danh hợp lệ hay không. Tôi biết anh ta đúng về các số nhận dạng không bắt đầu bằng một con số nhưng tôi cần phải đóng cửa trên phần mà người phân tích từ vựng phải là người quyết định điều đó.
Tôi thực sự sẽ đánh giá cao sự trợ giúp của bạn. Cảm ơn bạn
Tại sao không thể phân tích từ vựng đọc '1' và sau đó dừng lại ở 'a' flag '1' làm số và sau đó bắt đầu lại và sau đó đọc 'a' và gắn cờ làm số nhận dạng. Không phải là 'một' một tách biệt ở đây cho NFA mà đề với các con số? – Cheeta
Tôi muốn nói mã thông báo xảy ra với các dấu phân tách được xác định trước, thường là với dấu cách. Đối với trình phân tích từ vựng để tách chuỗi thành 1 và chúng ta cần xác định các quy tắc bổ sung để thực hiện việc này. Tôi nghĩ rằng những gì giáo viên của bạn có trong tâm trí là 1a là một trong những mã thông báo và vì nó không phù hợp với một biểu thức chính quy cho một định danh, các phân tích từ vựng sẽ đưa ra một lỗi. –
Tùy thuộc vào cách phân tích từ vựng được viết. Sử dụng flex nó thực sự là rất dễ dàng để tạo ra một phân tích từ vựng mà sẽ phân tích 1a như một số theo sau là một định danh. – Eelke