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] Phân loại token cơ bản

    Trong giai đoạn phân tích từ vựng (lexical analysis), bộ quét từ vựng (lexer) phải đọc dòng văn bản nguồn và chia thành các token, sau đó xác định loại của từng token.

    Cho một dòng văn bản gồm các token cách nhau bởi một hoặc nhiều khoảng trắng. Với mỗi token, hãy phân loại theo đúng thứ tự ưu tiên sau:

    • NUMBER: token chỉ gồm toàn chữ số 0-9 (độ dài tuỳ ý, có thể có số 0 ở đầu).
    • IDENT: token bắt đầu bằng chữ cái (a-z, A-Z) hoặc dấu gạch dưới _, và toàn bộ các ký tự còn lại (nếu có) đều là chữ cái, chữ số hoặc gạch dưới.
    • OTHER: token không thoả một trong hai điều kiện trên (ví dụ chứa dấu chấm, bắt đầu bằng chữ số nhưng có chứa chữ cái, chứa ký hiệu như +, ?, ...).

    Hãy đếm số lượng token thuộc mỗi loại.

    Ví dụ: với dòng 12 abc _x9 3.14 x+y ++, ta có 12 là NUMBER; abc, _x9 là IDENT; 3.14, x+y, ++ là OTHER. Kết quả: NUMBER: 1, IDENT: 2, OTHER: 3.

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

      Một dòng duy nhất (có thể rỗng) chứa các token cách nhau bởi khoảng trắng.

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

      In ra đúng 3 dòng theo thứ tự cố định:

      NUMBER: <số lượng>
      IDENT: <số lượng>
      OTHER: <số lượng>
      

    Ví dụ:

    Đầu vào:

    Đầu ra:

    NUMBER: 0
    IDENT: 0
    OTHER: 0
    

    Đầu vào:

    12 abc _x9 3.14 x+y ++

    Đầu ra:

    NUMBER: 1
    IDENT: 2
    OTHER: 3
    

    Đang tải editor...