Izdaja generatorja leksikalnega analizatorja re2c 2.0

potekala sprostitev re2c 2.0, brezplačen generator leksikalnega analizatorja za jezika C in C++. Projekt re2c je prvotno leta 1993 ustvaril Peter Bamboulis kot eksperimentalni generator zelo hitrih leksikalnih analizatorjev, ki se od drugih generatorjev razlikujejo po hitrosti generirane kode in neobičajno prilagodljivem uporabniškem vmesniku, ki omogoča enostavno in učinkovito vgradnjo analizatorjev v obstoječe kodna baza. Od takrat je projekt razvijala skupnost in je še naprej platforma za eksperimente in raziskave na področju formalnih slovnic in končnih avtomatov.

Večje spremembe:

  • Dodana podpora za jezik Go (omogočeno z možnostjo »--lang go« za re2c ali kot ločen program re2go). Dokumentacija za C in Go je ustvarjena iz istega besedila, vendar z različnimi primeri kode. Podsistem za generiranje kode v re2c je bil popolnoma preoblikovan, kar naj bi olajšalo podporo novim jezikom v prihodnosti.
  • Dodan alternativni gradbeni sistem za CMake (hvala ligfx!). Poskusi prevajanja re2c v CMake so potekali že dolgo, vendar do ligfx nihče ni predlagal popolne rešitve. Stari gradbeni sistem Autotools je še naprej podprt in uporabljen in ni načrtov, da bi ga v bližnji prihodnosti opustili (deloma zato, da bi se izognili težavam za razvijalce distribucije, delno zato, ker je stari gradbeni sistem stabilnejši in bolj jedrnat kot novi ). Oba sistema se nenehno testirata s Travis CI.
  • Dodana možnost določanja kode vmesnika v konfiguracijah pri uporabi splošnega API-ja. Prej je bilo treba večino API-jev podati v obliki funkcij ali funkcijskih makrov. Zdaj jih je mogoče podati v obliki poljubnih nizov z imenovanimi parametri predloge v obliki “@@{ime}” ali preprosto “@@” (če obstaja samo en parameter in ni dvoumnosti). Slog API-ja je nastavljen s konfiguracijo re2c:api:style (vrednost funkcij določa funkcionalni slog, prosta oblika pa poljuben slog).
  • Delovanje možnosti »-c«, »—start-conditions« je bilo izboljšano, kar vam omogoča združevanje več med seboj povezanih lekserjev v enem bloku re2c. Zdaj lahko uporabljate navadne bloke skupaj s pogojnimi in definirate več nepovezanih pogojnih blokov v eni datoteki. Izboljšano delovanje možnosti "-r", "--reuse" (ponovna uporaba kode iz enega bloka v drugih blokih) v kombinaciji z "-c", "--start-conditions" in "-f", "-- storable-state" možnosti (lekser s stanjem, ki ga je mogoče kadar koli prekiniti in pozneje nadaljevati izvajanje).
  • Odpravljena je napaka v nedavno dodanem algoritmu za konec vnosa (pravilo EOF), ki je v redkih primerih povzročil nepravilno obdelavo prekrivajočih se pravil.
  • Postopek zagona je poenostavljen. Prej je sistem gradnje poskušal dinamično najti že zgrajen re2c, ki bi ga lahko uporabili za ponovno izdelavo. To je vodilo do nepravilnih odvisnosti (ker je bil graf odvisnosti dinamičen, kar večini gradbenih sistemov ni všeč). Če želite znova zgraditi lekserje, morate izrecno konfigurirati sistem gradnje in nastaviti spremenljivko RE2C_FOR_BUILD.

Vir: opennet.ru

Dodaj komentar