Utgivelse av re2c 2.0 leksikalsk analysatorgenerator

fant sted utgivelse re2c 2.0, en gratis leksikalsk analysatorgenerator for C- og C++-språk. Re2c-prosjektet ble opprinnelig opprettet i 1993 av Peter Bamboulis som en eksperimentell generator av veldig raske leksikale analysatorer, skilt fra andre generatorer ved hastigheten til den genererte koden og et uvanlig fleksibelt brukergrensesnitt som gjør at analysatorer enkelt og effektivt kan bygges inn i en eksisterende. kodebase. Siden den gang har prosjektet blitt utviklet av samfunnet og fortsetter å være en plattform for eksperimenter og forskning innen formell grammatikk og endelige tilstandsmaskiner.

Hovedendringer:

  • Lagt til støtte for Go-språket (aktivert enten av "--lang go"-alternativet for re2c, eller som et separat re2go-program). Dokumentasjonen for C og Go er generert fra samme tekst, men med forskjellige kodeeksempler. Kodegenereringsundersystemet i re2c har blitt fullstendig redesignet, noe som skal gjøre det lettere å støtte nye språk i fremtiden.
  • Lagt til et alternativt byggesystem for CMake (takk ligfx!). Forsøk på å oversette re2c til CMake har vært gjort i lang tid, men inntil ligfx foreslo ingen en fullverdig løsning. Det gamle Autotools byggesystemet fortsetter å bli støttet og brukt, og det er ingen planer om å forlate det i overskuelig fremtid (delvis for å unngå å skape problemer for distribusjonsutviklere, delvis fordi det gamle byggesystemet er mer stabilt og mer konsist enn det nye ). Begge systemene testes kontinuerlig med Travis CI.
  • Lagt til muligheten til å spesifisere grensesnittkode i konfigurasjoner ved bruk av generisk API. Tidligere måtte de fleste API-er spesifiseres i form av funksjoner eller funksjonsmakroer. Nå kan de spesifiseres i form av vilkårlige strenger med navngitte malparametere av formen "@@{navn}" eller ganske enkelt "@@" (hvis det bare er én parameter og det ikke er noen tvetydighet). API-stilen er satt av re2c:api:stil-konfigurasjonen (funksjonsverdien spesifiserer funksjonsstilen, og fri form angir en vilkårlig stil).
  • Driften av "-c", "—start-betingelser"-alternativet har blitt forbedret, slik at du kan kombinere flere sammenkoblede lexere i en re2c-blokk. Nå kan du bruke vanlige blokker sammen med betingede blokker og definere flere urelaterte betingede blokker i én fil. Forbedret drift av "-r", "--reuse"-alternativet (gjenbruk av kode fra en blokk i andre blokker) i kombinasjon med "-c", "--start-betingelser" og "-f", "-- storable-state"-alternativer (en tilstandsfull lexer som kan avbrytes når som helst og fortsette kjøringen senere).
  • Rettet en feil i den nylig tillagte end-of-input (EOF-regelen) algoritmen, som i sjeldne tilfeller resulterte i feil behandling av overlappende regler.
  • Bootstrap-prosessen er forenklet. Tidligere prøvde byggesystemet å dynamisk finne en allerede bygget re2c som kunne brukes til å gjenoppbygge seg selv. Dette førte til feil avhengigheter (fordi avhengighetsgrafen var dynamisk, noe de fleste byggesystemer ikke liker). Nå, for å gjenoppbygge lexere, må du eksplisitt konfigurere byggesystemet og angi RE2C_FOR_BUILD-variabelen.

Kilde: opennet.ru

Legg til en kommentar