Phát hành trình tạo bộ phân tích từ vựng re2c 1.2

diễn ra giải phóng re2c, свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.

Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи «Efficient POSIX Submatch Extraction on 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
(сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией «—enable-libs»). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых
алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.

Основные новшества в версии re2c 1.2:

  • Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
    cho phép bạn chọn ký tự đầu cuối,
    и специальное правило «$», которое срабатывает если лексер
    đã đạ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» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
    а также в списке путей заданных с помощью опции «-I».
    Các tệp được bao gồm có thể bao gồm các tệp khác.
    Re2c предоставляет «стандартные» файлы в директории «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 ý
    содержанием при помощи опций «-t —type-header» (или соответствующих
    конфигураций) и новых директив «/*!header:re2c:on*/» и
    «/*!header:re2c:off*/». Это может быть полезно в случаях,
    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.
    По умолчанию, re2c парсит выражения вроде «∀x ∃y» как
    последовательность 1-битных ASCII-символов «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». Это очень неудобно и неожиданно для многих
    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 предоставляет опцию «—input-encoding {ascii | utf8}»,
    которая позволяет изменить поведение и распарсить «∀x ∃y» как
    «2200 78 20 2203 79».

  • Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-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
    с помощью новой опции «—location-format {gnu | msvc}». GNU-формат отображается
    как «filename:line:column:», а MSVC-формат — как «filename(line,column)».
    Tính năng này có thể hữu ích cho những người yêu thích IDE.
    Также была добавлена опция «—verbose», которая выводит краткое победоносное сообщение в случае успеха.

  • Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
    ưu tiên toán tử không chính xác trong những trường hợp hiếm hoi.
    Исторически опция «-F —flex-suppor» позволяет писать код
    đượ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.

  • Оператор вычитания символьных классов «/» теперь применяется
    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
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и 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
    исчерпывающейго одностраничного руководства
    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à
    может быть включен с помощью configure-опции «—enable-debug».

Nguồn: opennet.ru

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