re2c 1.2

W piątek 2 sierpnia ukazała się premiera re2c, darmowego generatora analizatorów leksykalnych dla języków C i C++. Re2c został napisany w 1993 roku przez Petera Bamboulisa jako eksperymentalny generator bardzo szybkich analizatorów leksykalnych, odróżniający się od innych generatorów szybkością generowanego kodu i niezwykle elastycznym interfejsem użytkownika, który umożliwia łatwe i wydajne osadzanie analizatorów w istniejącej bazie kodu. Od tego czasu projekt jest rozwijany przez społeczność i nadal stanowi platformę do eksperymentów i badań w dziedzinie gramatyk formalnych i maszyn skończonych.

Główne innowacje w wersji 1.2:

  • Dodano nowy (uproszczony) sposób sprawdzania końca danych wejściowych
    (angielski „reguła EOF”).
    W tym celu dodana została konfiguracja re2c:eof,
    pozwala wybrać znak terminala,
    oraz specjalna reguła $, która uruchamia się, jeśli lekser
    pomyślnie dotarł do końca danych wejściowych.
    Historycznie rzecz biorąc, re2c zapewnia wybór kilku metod weryfikacji
    koniec nakładów różniących się ograniczeniami, wydajnością i prostotą
    Aplikacje. Nowa metoda ma na celu uproszczenie pisania kodu, natomiast
    pozostając jednocześnie skutecznymi i szeroko stosowanymi. Stare sposoby
    nadal działa i w niektórych przypadkach może być preferowany.

  • Dodano możliwość dołączania plików zewnętrznych za pomocą dyrektywy
    /*!include:re2c "plik.re" */ gdzie plik.re
    to jest nazwa pliku dołączanego. Re2c szuka plików w katalogu zawierającym pliki,
    jak również na liście ścieżek określonych opcją -I.
    Dołączone pliki mogą zawierać inne pliki.
    Re2c udostępnia „standardowe” pliki w katalogu include/
    projektu – oczekuje się, że zgromadzą się w nim przydatne definicje
    wyrażenia regularne, coś w rodzaju biblioteki standardowej.
    Póki co na prośbę pracowników dodany został jeden plik z definicjami kategorii Unicode.

  • Dodano możliwość generowania plików nagłówkowych z dowolnymi plikami nagłówkowymi
    zawartość za pomocą opcji -t --type-header (lub odpowiedniego
    konfiguracje) i nowe dyrektywy /*!header:re2c:on*/ i
    /*!header:re2c:off*/. Może to być przydatne w przypadkach, gdy
    gdy re2c potrzebuje wygenerować definicje zmiennych, struktur i makr,
    używane w innych jednostkach tłumaczeniowych.

  • Re2c rozumie teraz literały UTF8 i klasy znaków w wyrażeniach regularnych.
    Domyślnie re2c analizuje wyrażenia takie jak „∀x ∃y” jako.
    sekwencja 1-bitowych znaków ASCII e2 88 80 78 20 e2 88 83 79
    (kody szesnastkowe), a użytkownicy muszą ręcznie zmieniać znaki Unicode:
    „u2200x u2203y”. Dla wielu jest to bardzo niewygodne i nieoczekiwane
    użytkowników (o czym świadczą ciągłe raporty o błędach). Więc teraz
    re2c udostępnia opcję --input-encoding ,
    co pozwala zmienić zachowanie i przeanalizować „∀x ∃y” jako
    2200 78 20 2203 79.

  • Re2c pozwala teraz na użycie zwykłych bloków re2c w trybie -r --reuse.
    Jest to wygodne, jeśli plik wejściowy zawiera wiele bloków i tylko niektóre z nich
    musi zostać ponownie użyty.

  • Teraz możesz ustawić format ostrzeżeń i komunikatów o błędach
    używając nowej opcji --location-format . Wyświetlany jest format GNU
    jako nazwa pliku:linia:kolumna: i format MSVC jako nazwa pliku(linia,kolumna).
    Ta funkcja może być przydatna dla miłośników IDE.
    Dodano także opcję --verbose, która w przypadku powodzenia wyświetla krótką wiadomość o zwycięstwie.

  • Ulepszono tryb „kompatybilności” z flexem – naprawiono niektóre błędy analizy i
    w rzadkich przypadkach nieprawidłowe pierwszeństwo operatora.
    Historycznie rzecz biorąc, opcja -F --flex-support umożliwiała pisanie kodu
    zmieszane w stylu flex i stylu re2c, co sprawia, że ​​parsowanie jest trochę trudne.
    Tryb zgodności Flex jest rzadko używany w nowym kodzie,
    ale re2c nadal obsługuje go w celu zapewnienia kompatybilności wstecznej.

  • Obowiązuje teraz operator odejmowania klasy znaków /
    przed rozszerzeniem kodowania, co pozwala na jego wykorzystanie w większej liczbie przypadków,
    jeśli używane jest kodowanie o zmiennej długości znaków (na przykład UTF8).

  • Plik wyjściowy jest teraz tworzony niepodzielnie: re2c tworzy najpierw plik tymczasowy
    i zapisuje w nim wynik, a następnie zmienia nazwę pliku tymczasowego na wynik
    jedna operacja.

  • Dokumentacja została uzupełniona i przepisana; w szczególności dodano nowe
    rozdziały o wypełnieniu bufora
    и o sposobach sprawdzania końca danych wejściowych.
    Nowa dokumentacja jest gromadzona w formularzu
    obszerny, jednostronicowy podręcznik
    z przykładami (te same źródła są renderowane na stronie podręcznika i w dokumentacji online).
    Podejmowano słabe próby poprawy czytelności witryny na telefonach.

  • Z punktu widzenia deweloperów re2c zyskał bardziej kompletny podsystem
    debugowanie Kod debugowania jest teraz wyłączony w kompilacjach wydań i
    można włączyć za pomocą opcji konfiguracyjnej --enable-debug.

To wydanie zajęło dużo czasu – prawie cały rok.
Większość czasu, jak zawsze, poświęcono na opracowanie podstaw teoretycznych i pisanie
Artykuł „Efektywna ekstrakcja poddopasowań POSIX w NFA”.
Algorytmy opisane w artykule zaimplementowano w eksperymentalnej bibliotece libre2c
(budowanie biblioteki i testów porównawczych jest domyślnie wyłączone i włączane za pomocą opcji konfiguracji
--enable-libs). Biblioteka nie jest pomyślana jako konkurencja dla istniejących
projektów takich jak RE2, ale jako platforma badawcza do opracowywania nowych
algorytmy (które można następnie wykorzystać w re2c lub w innych projektach).
Jest to również wygodne z punktu widzenia testowania, benchmarków i tworzenia powiązań z innymi językami.

Podziękowania od programistów re2c dla wszystkich, którzy pomogli w powstaniu tego wydania,
oraz ogólnie społeczności w celu uzyskania pomysłów, raportów o błędach, poprawek, morale itp. ;]

Źródło: linux.org.ru

Dodaj komentarz