Izdanje re2c lexer generatora 2.0

održan pustiti re2c 2.0, besplatni generator leksičkog analizatora za C i C++ jezike. Re2c projekat je prvobitno kreirao Peter Bamboulis 1993. godine kao eksperimentalni generator vrlo brzih leksičkih analizatora, koji se razlikuje od drugih generatora po brzini generiranog koda i neobično fleksibilnom korisničkom sučelju koje omogućava da se analizatori lako i efikasno ugrade u postojeći kodna baza. Od tada, projekat je razvila zajednica i nastavlja da bude platforma za eksperimente i istraživanja u oblasti formalnih gramatika i konačnih mašina.

Glavne promjene:

  • Dodata podrška za Go jezik (omogućena ili opcijom “--lang go” za re2c, ili kao poseban re2go program). Dokumentacija za C i Go je generisana iz istog teksta, ali sa različitim primerima koda. Podsistem za generisanje koda u re2c-u je potpuno redizajniran, što bi trebalo olakšati podršku za nove jezike u budućnosti.
  • Dodan je alternativni sistem izgradnje za CMake (hvala ligfx!). Pokušaji da se prevede re2c u CMake već dugo su napravljeni, ali do ligfx-a niko nije predložio potpuno rješenje. Stari Autotools build sistem i dalje se podržava i koristi i ne planira se napustiti u doglednoj budućnosti (djelomično kako bi se izbjeglo stvaranje problema za programere distribucije, dijelom zato što je stari sistem izgradnje stabilniji i sažetiji od novog ). Oba sistema se kontinuirano testiraju koristeći Travis CI.
  • Dodata mogućnost specificiranja koda interfejsa u konfiguracijama kada se koristi generički API. Ranije je većina API-ja morala biti specificirana u obliku funkcija ili funkcijskih makroa. Sada se mogu specificirati u obliku proizvoljnih nizova sa imenovanim parametrima šablona u obliku “@@{name}” ili jednostavno “@@” (ako postoji samo jedan parametar i nema nejasnoća). API stil je postavljen konfiguracijom re2c:api:style (vrijednost funkcije specificira funkcionalni stil, a slobodni oblik specificira proizvoljan stil).
  • Rad opcije “-c”, “—start-conditions” je poboljšan, što vam omogućava da kombinujete nekoliko međusobno povezanih leksera u jednom re2c bloku. Sada možete koristiti obične blokove zajedno s uslovnim i definirati nekoliko nepovezanih uvjetnih blokova u jednoj datoteci. Poboljšan rad opcije "-r", "--reuse" (ponovno korištenje koda iz jednog bloka u drugim blokovima) u kombinaciji sa "-c", "--start-conditions" i "-f", "-- "storable-state" opcije (lekser sa stanjem koji se može prekinuti u bilo kom trenutku i nastaviti sa izvršavanjem kasnije).
  • Ispravljena je greška u nedavno dodanom algoritmu kraja unosa (EOF pravilo), što je u rijetkim slučajevima rezultiralo pogrešnom obradom pravila koja se preklapaju.
  • Bootstrap proces je pojednostavljen. Ranije je sistem izgradnje pokušavao dinamički pronaći već izgrađeni re2c koji bi se mogao koristiti za samu rekonstrukciju. To je dovelo do pogrešnih zavisnosti (jer je graf zavisnosti bio dinamičan, što većina sistema za izgradnju ne voli). Sada, da biste ponovo izgradili leksere, morate eksplicitno konfigurirati sistem izgradnje i postaviti varijablu RE2C_FOR_BUILD.

izvor: opennet.ru

Dodajte komentar