Keluaran penjana penganalisis leksikal re2c 1.2

mengambil tempat melepaskan re2c, свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.

Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи «Efficient POSIX Submatch Extraction on NFA".
Algoritma yang diterangkan dalam artikel dilaksanakan dalam perpustakaan eksperimen libre2c
(сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией «—enable-libs»). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых
алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.

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

  • Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
    membolehkan anda memilih aksara terminal,
    и специальное правило «$», которое срабатывает если лексер
    berjaya mencapai penghujung data input.
    Dari segi sejarah, re2c menyediakan pilihan beberapa kaedah pengesahan untuk
    akhir input yang berbeza-beza dalam had, kecekapan dan kesederhanaan
    aplikasi. Kaedah baharu ini direka untuk memudahkan penulisan kod, manakala
    sambil kekal berkesan dan boleh digunakan secara meluas. Cara lama
    masih berfungsi dan mungkin diutamakan dalam beberapa kes.

  • Menambah keupayaan untuk memasukkan fail luaran menggunakan arahan
    «/*!include:re2c «file.re» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
    а также в списке путей заданных с помощью опции «-I».
    Fail yang disertakan mungkin termasuk fail lain.
    Re2c предоставляет «стандартные» файлы в директории «include/»
    projek - adalah dijangka bahawa definisi berguna akan terkumpul di sana
    ungkapan biasa, sesuatu seperti perpustakaan standard.
    Setakat ini, atas permintaan pekerja, satu fail dengan definisi kategori Unicode telah ditambah.

  • Menambah keupayaan untuk menjana fail pengepala dengan sewenang-wenangnya
    содержанием при помощи опций «-t —type-header» (или соответствующих
    конфигураций) и новых директив «/*!header:re2c:on*/» и
    «/*!header:re2c:off*/». Это может быть полезно в случаях,
    apabila re2c perlu menjana definisi pembolehubah, struktur dan makro,
    digunakan dalam unit terjemahan lain.

  • Re2c kini memahami huruf UTF8 dan kelas aksara dalam ungkapan biasa.
    По умолчанию, re2c парсит выражения вроде «∀x ∃y» как
    последовательность 1-битных ASCII-символов «e2 88 80 78 20 e2 88 83 79»
    (kod hex), dan pengguna perlu melepaskan aksara Unicode secara manual:
    «\\u2200x \\u2203y». Это очень неудобно и неожиданно для многих
    pengguna (seperti yang dibuktikan oleh laporan pepijat yang berterusan). Jadi sekarang
    re2c предоставляет опцию «—input-encoding {ascii | utf8}»,
    которая позволяет изменить поведение и распарсить «∀x ∃y» как
    «2200 78 20 2203 79».

  • Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-r —reuse».
    Ini mudah jika fail input mengandungi banyak blok dan hanya sebahagian daripadanya
    perlu diguna semula.

  • Kini anda boleh menetapkan format amaran dan mesej ralat
    с помощью новой опции «—location-format {gnu | msvc}». GNU-формат отображается
    как «filename:line:column:», а MSVC-формат — как «filename(line,column)».
    Ciri ini mungkin berguna untuk pencinta IDE.
    Также была добавлена опция «—verbose», которая выводит краткое победоносное сообщение в случае успеха.

  • Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
    keutamaan pengendali yang salah dalam kes yang jarang berlaku.
    Исторически опция «-F —flex-suppor» позволяет писать код
    bercampur dalam gaya flex dan gaya re2c, yang menjadikan penghuraian agak sukar.
    Mod keserasian fleksibel jarang digunakan dalam kod baharu,
    tetapi re2c terus menyokongnya untuk keserasian ke belakang.

  • Оператор вычитания символьных классов «/» теперь применяется
    sebelum mengembangkan pengekodan, yang membolehkan ia digunakan dalam bilangan kes yang lebih besar,
    jika pengekodan panjang aksara berubah digunakan (contohnya UTF8).

  • Fail output kini dicipta secara atom: re2c mencipta fail sementara dahulu
    dan menulis hasilnya ke dalamnya, dan kemudian menamakan semula fail sementara kepada output
    satu operasi.

  • Dokumentasi telah disiapkan dan ditulis semula; khususnya, yang baharu telah ditambah
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и tentang cara untuk menyemak penghujung data input.
    Dokumentasi baharu dikumpulkan dalam borang
    исчерпывающейго одностраничного руководства
    dengan contoh (sumber yang sama dipaparkan dalam halaman manual dan dalam dokumentasi dalam talian).
    Percubaan buruk telah dibuat untuk meningkatkan kebolehbacaan tapak pada telefon.

  • Dari sudut pandangan pembangun, re2c telah memperoleh subsistem yang lebih lengkap
    penyahpepijatan Kod penyahpepijatan kini dilumpuhkan dalam binaan keluaran dan
    может быть включен с помощью configure-опции «—enable-debug».

Sumber: opennet.ru

Tambah komen