Liberigo de re2c lexer-generatoro 2.0

okazis liberigi re2c 2.0, libera vortfarada analizilo generatoro por C kaj C++ lingvoj. La re2c-projekto estis origine kreita en 1993 fare de Peter Bamboulis kiel eksperimenta generatoro de tre rapidaj vortfaradanaliziloj, distingitaj de aliaj generatoroj per la rapideco de la generita kodo kaj nekutime fleksebla uzantinterfaco kiu permesas al analiziloj esti facile kaj efike enkonstruitaj en ekzistantan. kodbazo. Ekde tiam, la projekto estis evoluigita de la komunumo kaj daŭre estas platformo por eksperimentoj kaj esplorado en la kampo de formalaj gramatikoj kaj finhavaj ŝtatmaŝinoj.

Ĉefaj ŝanĝoj:

  • Aldonita subteno por la lingvo Go (ebligita aŭ per la opcio "--lang go" por re2c, aŭ kiel aparta programo re2go). La dokumentaro por C kaj Go estas generita de la sama teksto, sed kun malsamaj kodekzemploj. La koda genera subsistemo en re2c estis tute restrukturita, kio devus faciligi subteni novajn lingvojn estonte.
  • Aldonita alternativa konstrusistemo sur CMake (dankon ligfx!). Provoj traduki re2c al CMake estis faritaj delonge, sed ĝis ligfx neniu proponis plentaŭgan solvon. La malnova konstrusistemo de Autotools daŭre estas subtenata kaj uzata, kaj ne estas planoj forlasi ĝin en antaŭvidebla estonteco (parte por eviti krei problemojn por distribuaj programistoj, parte ĉar la malnova konstrusistemo estas pli stabila kaj pli konciza ol la nova. ). Ambaŭ sistemoj estas kontinue testitaj uzante Travis CI.
  • Aldonis la kapablon specifi interfackodon en agordoj kiam vi uzas la senmarkan API. Antaŭe, la plej multaj API-oj devis esti precizigitaj en la formo de funkcioj aŭ funkciaj makrooj. Nun ili povas esti specifitaj en formo de arbitraj ĉenoj kun nomitaj ŝablonaj parametroj de la formo “@@{nomo}” aŭ simple “@@” (se estas nur unu parametro kaj ne estas ambigueco). La API-stilo estas agordita per la agordo re2c:api:style (la funkcio-valoro precizigas la funkcian stilon, kaj libera formo precizigas arbitran stilon).
  • La funkciado de la opcio "-c", "—start-conditions" estis plibonigita, permesante al vi kombini plurajn interligitajn lektorojn en unu re2c-bloko. Nun vi povas uzi regulajn blokojn kune kun kondiĉaj kaj difini plurajn senrilatajn kondiĉblokojn en unu dosiero. Plibonigita funkciado de la opcio "-r", "--reuse" (reuzo de kodo de unu bloko en aliaj blokoj) kombine kun la "-c", "--start-conditions" kaj "-f", "-- stokebla-ŝtato" opcioj (ŝtata leksilo kiu povas esti interrompita ĉe iu punkto kaj daŭrigi ekzekuton poste).
  • Korektis cimon en la lastatempe aldonita fino de enigo (EOF-regulo) algoritmo, kiu en maloftaj kazoj rezultigis malĝustan prilaboradon de interkovritaj reguloj.
  • La bootstrap procezo estis simpligita. Antaŭe, la konstrusistemo provis dinamike trovi jam konstruitan re2c kiu povus esti uzata por rekonstrui sin. Ĉi tio kondukis al malĝustaj dependecoj (ĉar la dependeca grafeo estis dinamika, kion la plej multaj konstrusistemoj ne ŝatas). Nun, por rekonstrui lekserojn, vi devas eksplicite agordi la konstrusistemon kaj agordi la variablon RE2C_FOR_BUILD.

fonto: opennet.ru

Aldoni komenton