релиз , en gratis leksikalsk analysatorgenerator til C og C++ sprog. Re2c-projektet blev oprindeligt oprettet i 1993 af Peter Bamboulis som en eksperimentel generator af meget hurtige leksikalske analysatorer, der adskiller sig fra andre generatorer ved hastigheden af den genererede kode og en usædvanlig fleksibel brugergrænseflade, der gør det muligt for analysatorer nemt og effektivt at blive integreret i en eksisterende. kodebase. Siden da er projektet blevet udviklet af samfundet og fortsætter med at være en platform for eksperimenter og forskning inden for formelle grammatikker og finite state-maskiner.
Vigtigste ændringer:
- Tilføjet understøttelse af Go-sproget (aktiveret enten af "--lang go"-indstillingen for re2c eller som et separat re2go-program). Dokumentationen til C og Go er genereret ud fra den samme tekst, men med forskellige kodeeksempler. Kodegenereringsundersystemet i re2c er blevet fuldstændig redesignet, hvilket skulle gøre det lettere at understøtte nye sprog i fremtiden.
- Tilføjet alternativt byggesystem på CMake (tak !). Forsøg på at oversætte re2c til CMake har været gjort i lang tid, men indtil ligfx foreslog ingen en fuldgyldig løsning. Det gamle Autotools byggesystem bliver fortsat understøttet og brugt, og der er ingen planer om at opgive det inden for en overskuelig fremtid (delvis for at undgå at skabe problemer for distributionsudviklere, dels fordi det gamle byggesystem er mere stabilt og mere kortfattet end det nye. ). Begge systemer testes løbende med Travis CI.
- Tilføjet muligheden for at angive grænsefladekode i konfigurationer ved brug af den generiske API. Tidligere skulle de fleste API'er specificeres i form af funktioner eller funktionsmakroer. Nu kan de specificeres i form af vilkårlige strenge med navngivne skabelonparametre på formen "@@{navn}" eller blot "@@" (hvis der kun er én parameter, og der ikke er nogen tvetydighed). API-stilen er indstillet af re2c:api:stil-konfigurationen (funktionsværdien angiver den funktionelle stil, og fri form angiver en vilkårlig stil).
- Betjeningen af "-c", "—start-betingelser" muligheden er blevet forbedret, så du kan kombinere flere indbyrdes forbundne lexere i en re2c blok. Nu kan du bruge almindelige blokke sammen med betingede blokke og definere flere ikke-relaterede betingede blokke i én fil. Forbedret drift af "-r", "--genbrug" mulighed (genbrug af kode fra en blok i andre blokke) i kombination med "-c", "--start-betingelser" og "-f", "-- store-tilstand"-indstillinger (en stateful lexer, der kan afbrydes på ethvert tidspunkt og fortsætte med eksekveringen senere).
- Rettede en fejl i den nyligt tilføjede end-of-input (EOF-regel) algoritme, som i sjældne tilfælde resulterede i forkert behandling af overlappende regler.
- Bootstrap-processen er blevet forenklet. Tidligere forsøgte byggesystemet dynamisk at finde en allerede bygget re2c, der kunne bruges til at genopbygge sig selv. Dette førte til forkerte afhængigheder (fordi afhængighedsgrafen var dynamisk, hvilket de fleste byggesystemer ikke kan lide). Nu, for at genopbygge lexere, skal du eksplicit konfigurere byggesystemet og indstille RE2C_FOR_BUILD-variablen.
Kilde: opennet.ru
