re2c 2.0

W poniedziałek 20 lipca została wydana wersja re2c – generatora szybkich analizatorów leksykalnych.
Główne zmiany:

  • Dodano wsparcie dla języka Go
    (włącza się to albo za pomocą opcji —lang go dla re2c, albo jako oddzielny program re2go).
    Dokumentacja dla C i Go jest generowana z tego samego tekstu, ale z różnymi
    przykładami kodu. Całkowicie przebudowano podsystem generowania kodu w re2c, co
    powinno ułatwić wsparcie dla nowych języków w przyszłości.

  • Dodano alternatywny system budowy oparty na CMake (dziękujemy ligfx!).


    Próby przetłumaczenia re2c na CMake podejmowane były już od dawna, jednak do ligfx nikt nie
    zaprezentował pełnoprawnego rozwiązania.
    Stary system budowy oparty na Autotools nadal jest wspierany i używany,
    a w najbliższej przyszłości nie ma planów, aby z niego zrezygnować (częściowo aby nie tworzyć
    problemów dla twórców dystrybucji, częściowo dlatego, że stary system budowy
    jest stabilniejszy i bardziej zwięzły niż nowy).
    Oba systemy są na równi ciągle testowane za pomocą Travis CI.
  • Dodano możliwość definiowania kodu interfejsu w konfiguracjach przy użyciu
    ogólnego API (generic API). Wcześniej większość API musiała być definiowana w formie
    funkcji lub funkcjonalnych makr. Teraz można je definiować w formie dowolnych
    łańcuchów z nazwanymi parametrami szablonów w postaci @@{name} lub po prostu @@ (jeśli
    parametr jest jeden i nie powstaje niejednoznaczność). Styl API definiuje się w konfiguracji
    re2c:api:style (wartość functions definiuje styl funkcjonalny, a free-form – dowolny).

  • Udoskonalono działanie opcji -c, —start-conditions, umożliwiającej łączenie kilku
    powiązanych leksyków w jednym bloku re2c. Teraz można używać
    zwykłych bloków razem z warunkowymi i definiować kilka niepowiązanych warunkowych
    bloków w jednym pliku.
    Udoskonalono działanie opcji -r, —reuse (ponowne użycie kodu z jednego bloku
    w innych blokach) w połączeniu z opcjami -c, —start-conditions i -f, —storable-state
    (leksyk z zapisywanym stanem, który można przerwać w dowolnym miejscu
    i kontynuować wykonanie później).

  • Poprawiono błąd w niedawno dodanym algorytmie przetwarzania końca danych wejściowych
    (reguła EOF), który w rzadkich przypadkach prowadził do niewłaściwego przetwarzania
    nakładających się reguł.

  • Uproszczono proces bootstrappingu. Wcześniej system budowy próbował dynamicznie znaleźć już
    skompilowany re2c, który można by wykorzystać do ponownej kompilacji samego siebie.
    To prowadziło do nieprawidłowych zależności (ponieważ graf zależności stawał się
    dynamiczny, co większość systemów budowy nie lubi).
    Teraz, aby ponownie skompilować leksery, należy w sposób jawny
    skonfigurować system budowy i ustawić zmienną RE2C_FOR_BUILD.

Dziękujemy wszystkim, którzy wzięli udział w przygotowaniu tej wersji!

Ź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