re2c 1.2

Vào thứ Sáu, ngày 2 tháng 2, re2c, một trình tạo bộ phân tích từ vựng miễn phí cho ngôn ngữ C và C++, đã được phát hành. Xin nhắc lại, re1993c được Peter Bamboulis viết vào năm XNUMX như một trình tạo thử nghiệm của các máy phân tích từ vựng rất nhanh, được phân biệt với các trình tạo khác bởi tốc độ của mã được tạo và giao diện người dùng linh hoạt khác thường cho phép các trình phân tích được nhúng dễ dàng và hiệu quả vào một hệ thống. cơ sở mã hiện có. Kể từ đó, dự án đã được cộng đồng phát triển và tiếp tục là nền tảng cho các thử nghiệm và nghiên cứu trong lĩnh vực ngữ pháp hình thức và máy trạng thái hữu hạn.

Những cải tiến chính trong phiên bản 1.2:

  • Đã thêm một cách mới (đơn giản hóa) để kiểm tra phần cuối của dữ liệu đầu vào
    (tiếng Anh “Quy tắc EOF”).
    Đối với điều này, cấu hình re2c:eof đã được thêm vào,
    cho phép bạn chọn ký tự đầu cuối,
    và một quy tắc $ đặc biệt sẽ kích hoạt nếu lexer
    đã đạt đến cuối dữ liệu đầu vào thành công.
    Về mặt lịch sử, re2c cung cấp nhiều lựa chọn về phương pháp xác minh cho
    kết thúc đầu vào khác nhau về hạn chế, hiệu quả và đơn giản
    các ứng dụng. Phương pháp mới được thiết kế để đơn giản hóa việc viết mã, đồng thời
    vẫn có hiệu quả và được áp dụng rộng rãi. Cách cũ
    vẫn hoạt động và có thể được ưu tiên trong một số trường hợp.

  • Đã thêm khả năng bao gồm các tệp bên ngoài bằng lệnh
    /*!include:re2c "file.re" */ trong đó file.re
    đây là tên của tập tin bao gồm. Re2c tìm kiếm các tập tin trong thư mục chứa tập tin,
    cũng như trong danh sách các đường dẫn được chỉ định bằng tùy chọn -I.
    Các tệp được bao gồm có thể bao gồm các tệp khác.
    Re2c cung cấp các tệp "chuẩn" trong thư mục include/
    dự án - người ta hy vọng rằng các định nghĩa hữu ích sẽ tích lũy ở đó
    biểu thức chính quy, giống như thư viện chuẩn.
    Cho đến nay, theo yêu cầu của người lao động, một tệp có định nghĩa về các danh mục Unicode đã được thêm vào.

  • Đã thêm khả năng tạo tệp tiêu đề tùy ý
    nội dung bằng cách sử dụng các tùy chọn -t --type-header (hoặc thích hợp
    cấu hình) và các lệnh mới /*!header:re2c:on*/ và
    /*!header:re2c:off*/. Điều này có thể hữu ích trong trường hợp
    khi re2c cần tạo định nghĩa về biến, cấu trúc và macro,
    được sử dụng trong các đơn vị dịch thuật khác.

  • Re2c hiện hiểu các lớp ký tự và ký tự UTF8 trong biểu thức chính quy.
    Theo mặc định, re2c phân tích các biểu thức như "∀x ∃y" dưới dạng.
    chuỗi ký tự ASCII 1 bit e2 88 80 78 20 e2 88 83 79
    (mã hex) và người dùng phải thoát ký tự Unicode theo cách thủ công:
    "u2200x u2203y". Điều này rất bất tiện và bất ngờ đối với nhiều người.
    người dùng (bằng chứng là các báo cáo lỗi liên tục). Vậy bây giờ
    re2c cung cấp tùy chọn --input-encoding ,
    cho phép bạn thay đổi hành vi và phân tích "∀x ∃y" thành
    2200 78 20 2203 79.

  • Re2c hiện cho phép sử dụng các khối re2c thông thường ở chế độ -r --reuse.
    Điều này thuận tiện nếu tệp đầu vào chứa nhiều khối và chỉ một số khối trong số đó
    cần được tái sử dụng.

  • Bây giờ bạn có thể đặt định dạng cảnh báo và thông báo lỗi
    sử dụng tùy chọn --location-format mới . Định dạng GNU được hiển thị
    dưới dạng tên tệp: dòng: cột: và định dạng MSVC dưới dạng tên tệp (dòng, cột).
    Tính năng này có thể hữu ích cho những người yêu thích IDE.
    Tùy chọn --verbose cũng đã được thêm vào, in ra một thông báo chiến thắng ngắn nếu thành công.

  • Chế độ "tương thích" với flex đã được cải thiện - một số lỗi phân tích cú pháp đã được sửa và
    ưu tiên toán tử không chính xác trong những trường hợp hiếm hoi.
    Về mặt lịch sử, tùy chọn -F --flex-support cho phép bạn viết mã
    được trộn lẫn theo kiểu flex và kiểu re2c, điều này khiến việc phân tích cú pháp hơi khó khăn.
    Chế độ tương thích linh hoạt hiếm khi được sử dụng trong mã mới,
    nhưng re2c vẫn tiếp tục hỗ trợ khả năng tương thích ngược.

  • Toán tử trừ lớp ký tự / hiện được áp dụng
    trước khi mở rộng mã hóa, cho phép nó được sử dụng trong nhiều trường hợp hơn,
    nếu sử dụng mã hóa độ dài ký tự thay đổi (ví dụ UTF8).

  • Tệp đầu ra hiện được tạo nguyên tử: trước tiên re2c tạo tệp tạm thời
    và ghi kết quả vào đó, sau đó đổi tên tệp tạm thời thành đầu ra
    một thao tác.

  • Tài liệu đã được hoàn thiện và viết lại; đặc biệt, những cái mới đã được thêm vào
    chương về việc lấp đầy bộ đệm
    и về cách kiểm tra phần cuối của dữ liệu đầu vào.
    Các tài liệu mới được thu thập dưới dạng
    một hướng dẫn toàn diện một trang
    với các ví dụ (các nguồn tương tự được hiển thị trong trang chủ và trong tài liệu trực tuyến).
    Những nỗ lực kém đã được thực hiện nhằm cải thiện khả năng đọc của trang web trên điện thoại.

  • Theo quan điểm của các nhà phát triển, re2c đã có được một hệ thống con hoàn chỉnh hơn
    gỡ lỗi Mã gỡ lỗi hiện đã bị vô hiệu hóa trong các bản phát hành và
    có thể được bật bằng tùy chọn cấu hình --enable-debug.

Việc phát hành này mất một thời gian dài - gần cả năm.
Hầu hết thời gian, như mọi khi, được dành cho việc phát triển khung lý thuyết và viết
Điều "Trích xuất phụ POSIX hiệu quả trên NFA".
Các thuật toán được mô tả trong bài viết được triển khai trong thư viện thử nghiệm libre2c
(xây dựng thư viện và điểm chuẩn bị tắt theo mặc định và được bật bởi tùy chọn cấu hình
--enable-lib). Thư viện không được coi là đối thủ cạnh tranh với thư viện hiện có
các dự án như RE2, mà là nền tảng nghiên cứu để phát triển các dự án mới
các thuật toán (sau đó có thể được sử dụng trong re2c hoặc trong các dự án khác).
Nó cũng thuận tiện từ quan điểm kiểm tra, điểm chuẩn và tạo ràng buộc với các ngôn ngữ khác.

Cảm ơn các nhà phát triển re2c tới tất cả những người đã giúp bản phát hành này diễn ra,
và cộng đồng nói chung về các ý tưởng, báo cáo lỗi, bản vá, tinh thần, v.v. ;]

Nguồn: linux.org.ru

Thêm một lời nhận xét