Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Định danh hợp lệ và giới hạn độ dài

    Một trình biên dịch giả định quy định một xâu sss thoả cú pháp định danh (identifier) nếu:

    • sss có độ dài ít nhất 1;
    • ký tự đầu tiên là chữ cái (a-z, A-Z) hoặc dấu gạch dưới _;
    • các ký tự còn lại (nếu có) là chữ cái, chữ số hoặc _.

    Trình biên dịch giả định còn có thêm 2 ràng buộc thực tế:

    1. Danh sách 10 từ khóa dành riêng: if, else, while, for, return, int, float, void, break, continue. Nếu sss trùng khớp chính xác (phân biệt hoa/thường) với một từ khóa, sss không được coi là định danh dù thoả cú pháp ở trên.
    2. Bảng ký hiệu (symbol table) chỉ lưu được tối đa 31 ký tự đầu cho mỗi định danh. Một định danh thoả cú pháp nhưng có độ dài lớn hơn 31 vẫn hợp lệ về cú pháp, nhưng bị đánh dấu vượt giới hạn.

    Với mỗi xâu sss cho trước, hãy phân loại theo đúng 1 trong 4 nhãn sau (kiểm tra theo thứ tự):

    • KEYWORD nếu sss trùng một từ khóa;
    • INVALID nếu sss không thoả cú pháp định danh (kể cả xâu rỗng);
    • TOO_LONG nếu sss thoả cú pháp định danh và có độ dài >31> 31>31;
    • VALID nếu sss thoả cú pháp định danh và có độ dài ≤31\le 31≤31.

    Ví dụ: Input

    4
    if
    _abc123
    1bad
    abc-def
    

    Output

    KEYWORD
    VALID
    INVALID
    INVALID
    
    • Định dạng đầu vào:

      Dòng đầu là số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000). nnn dòng tiếp theo, mỗi dòng là một xâu sss gồm các ký tự in được (có thể là xâu rỗng), không chứa khoảng trắng, độ dài không vượt quá 200.

    • Định dạng đầu ra:

      In ra đúng nnn dòng, mỗi dòng là một trong 4 nhãn KEYWORD, INVALID, TOO_LONG, VALID, tương ứng với xâu ở dòng đầu vào cùng thứ tự.

    Ví dụ:

    Đầu vào:

    1
    _
    

    Đầu ra:

    VALID
    

    Đầu vào:

    6
    if
    _abc123
    1bad
    abc-def
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    
    

    Đầu ra:

    KEYWORD
    VALID
    INVALID
    INVALID
    TOO_LONG
    INVALID
    

    Đang tải editor...