re2c 1.2

W piątek 2 sierpnia wydano re2c — wolny generator analizatorów leksykalnych dla języków C i C++. Przypominamy, że re2c został napisany w 1993 roku przez Pietera Bambulisa jako eksperymentalny generator bardzo szybkich analizatorów leksykalnych, który różni się od innych generatorów szybkością generowanego kodu oraz niezwykle elastycznym interfejsem użytkownika, który pozwala łatwo i efektywnie integrować analizatory w istniejącą bazę kodu. Od tego czasu projekt rozwija się w społeczności i nadal pozostaje miejscem eksperymentów i badań w zakresie formalnych gramatyk i automatów skończonych.

Główne nowości w wersji 1.2:

  • Dodano nowy (uproszczony) sposób weryfikacji końca danych wejściowych
    (ang. „EOF rule”).
    W tym celu dodano konfigurację re2c:eof,
    umożliwiającą wybór symbolu terminalnego,
    oraz specjalna reguła $, która działa, jeśli lexer
    pomyślnie osiągnie koniec danych wejściowych.
    Historycznie re2c oferuje do wyboru kilka metod weryfikacji końca
    danych wejściowych, różniących się ograniczeniem, wydajnością i prostotą
    zastosowania. Nowa metoda ma na celu uproszczenie pisania kodu, pozostając przy tym
    wydajna i szeroko stosowalna. Stare metody
    wciąż działają i mogą być preferowane w niektórych przypadkach.

  • Dodano możliwość dołączania zewnętrznych plików za pomocą dyrektywy
    /*!include:re2c "file.re" */, где file.re
    to nazwa pliku dołączanego. Re2c szuka plików w katalogu pliku dołączanego,
    a także na liście ścieżek podanych za pomocą opcji -I.
    Włączone pliki mogą zawierać inne pliki.
    Re2c dostarcza „standardowe” pliki w katalogu include/
    projektu — zakłada się, że będą tam zbierane przydatne definicje
    wyrażeń regularnych, coś w stylu standardowej biblioteki.
    Jak na razie, na prośby użytkowników, dodano jeden plik z definicjami kategorii Unicode.

  • Dodano możliwość generowania plików nagłówkowych z dowolnym
    zawartością za pomocą opcji -t —type-header (lub odpowiadających
    konfiguracji) oraz nowych dyrektyw \*!header:re2c:on*/ i
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    gdy re2c musi wygenerować definicje zmiennych, struktur i makr,
    używanych w innych jednostkach translacji.

  • Re2c teraz rozumie literały UTF8 i klasy znaków w wyrażeniach regularnych.
    Domyślnie re2c analizuje wyrażenia takie jak "∀x ∃y" jako.
    ciąg 1-bitowych znaków ASCII e2 88 80 78 20 e2 88 83 79
    (kody hex), co zmusza użytkowników do ręcznego escape'owania znaków Unicode:
    "u2200x u2203y". Jest to bardzo niewygodne i nieoczekiwane dla wielu
    użytkowników (o czym świadczą ciągłe zgłoszenia błędów). Dlatego teraz
    re2c dostarcza opcję —input-encoding ,
    która pozwala zmienić zachowanie i przeanalizować "∀x ∃y" jako
    2200 78 20 2203 79.

  • Re2c teraz pozwala na używanie zwykłych bloków re2c w trybie -r —reuse.
    To jest wygodne, jeśli plik wejściowy zawiera wiele bloków, a tylko część z nich
    wymaga ponownego użycia.

  • Pojawiła się możliwość ustawiania formatu ostrzeżeń i komunikatów o błędach
    z nową opcją —location-format . Format GNU jest wyświetlany
    jako filename:line:column:, a format MSVC — jako filename(line,column).
    Ta możliwość może być przydatna dla miłośników IDE.
    Dodano również opcję —verbose, która wyświetla krótką sukcesywną wiadomość w przypadku powodzenia.

  • Zmodernizowano tryb „kompatybilności” z flex — naprawiono niektóre błędy analizy oraz
    niepoprawny priorytet operatorów w rzadkich przypadkach.
    Historycznie opcja -F —flex-support pozwala pisanie kodu
    w stylu flex i w stylu re2c, co trochę utrudnia analizę składni.
    Tryb kompatybilności z flex rzadko jest używany w nowym kodzie,
    jednakże re2c wciąż go wspiera dla kompatybilności wstecznej.

  • Operator odejmowania klas znaków / teraz stosuje się
    do rozwijania kodowania, co pozwala na jego zastosowanie w większej liczbie przypadków,
    jeśli jest używane kodowanie o zmiennej długości znaku (np. UTF8).

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

  • Dokumentacja została dopisana i przepisana; w szczególności dodano nowe
    rozdział o wypełnianiu bufora
    i w zakresie sposobów sprawdzania końca danych wejściowych..
    Nowa dokumentacja została zebrana w formie
    wyczerpującego jednopłatkowego podręcznika
    z przykładami (te same źródła są renderowane w manpage i w dokumentacji online).
    Podjęto słabe próby poprawy czytelności strony na telefonach.

  • Z punktu widzenia programistów, re2c zyskał pełniejszy system
    debugowania. Kod debugowania jest teraz wyłączony w wersjach produkcyjnych i
    może być włączony za pomocą opcji konfiguracyjnej —enable-debug.

Ta wersja zajęła dużo czasu — prawie rok.
Większość czasu, jak zawsze, poświęcono na opracowanie podstawy teoretycznej i napisanie
artykułu „Efficient POSIX Submatch Extraction on NFA”.
Algorytmy opisane w artykule są zaimplementowane w eksperymentalnej bibliotece libre2c
(domyślnie wyłączone zbiory biblioteki i benchmarków są włączane przez opcję configure —enable-libs). Biblioteka nie jest zaprojektowana jako konkurencja dla istniejących
projektów, takich jak RE2, lecz jako platforma badawcza do rozwoju nowych
algorytmów (które później mogą być wykorzystywane w re2c lub innych projektach).
Jest to również wygodne z punktu widzenia testowania, benchmarków i tworzenia bindingów do innych języków.
Dziękujemy od twórców re2c wszystkim, którzy przyczynili się do powstania tej wersji,

a także całej społeczności za pomysły, raporty o błędach, poprawki, ducha walki itd.;]
W piątek 2 sierpnia wydano wersję re2c — wolnego generatora analizatorów leksykalnych dla języków C i C++.

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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster