udgivelse , en gratis generator af leksiske analyserere til C og C++. Vi minder om, at re2c blev skrevet i 1993 af Peter Bambulis som en eksperimentel generator af meget hurtige leksiske analyserere, der adskiller sig fra andre generatorer ved hastigheden af den genererede kode og det usædvanligt fleksible brugerinterface, som let og effektivt gør det muligt at integrere analyserere i eksisterende kodebaser. Siden da har projektet udviklet sig af fællesskabet og fortsætter med at være en platform for eksperimenter og forskning inden for formelle grammatikker og endelige automater.
Forberedelsen af udgivelsen tog næsten et helt år. Det meste af tiden, som altid, blev brugt på at udvikle den teoretiske basis og skrive
artiklen ««.
Algoritmerne beskrevet i artiklen er implementeret i et eksperimentelt bibliotek libre2c
(bygning af biblioteket og ydeevnetests er som standard deaktiveret og aktiveres med configure-muligheden «—enable-libs»). Biblioteket er ikke designet som en konkurrent til eksisterende projekter som RE2, men som en forskningsplatform til udvikling af nye
algoritmer (som senere kan anvendes i re2c eller i andre projekter). Det er også praktisk set i forhold til testning, ydeevnemåling og oprettelse af bindinger til andre sprog.
De vigtigste nyheder i version re2c 1.2:
- En ny forenklet måde at kontrollere slutningen af inputdata («EOF rule») er blevet tilføjet. Til dette er konfigurationen «re2c:eof» tilføjet,
som giver mulighed for at vælge terminalsymbolet,
og en særlig regel «$», der aktiveres, når lektoren
har nået slutningen af inputdataene.
Historisk set tilbyder re2c flere måder at tjekke på
slutningen af inputdataene, varierende i begrænsning, effektivitet og enkelhed
i anvendelsen. Den nye metode er designet til at forenkle kodningen, samtidig med at den
forbliver effektiv og bredt anvendelig. De gamle metoder
arbejder stadig og kan være at foretrække i visse tilfælde. - Muligheden for at inkludere eksterne filer med direktivet
«/*!include:re2c «file.re» */», hvor «file.re» er navnet på den inkluderede fil. Re2c søger filer i den inkluderende fils mappe,
samt i listen over stier angivet med indstillingen «-I».
Inkluderede filer kan inkludere andre filer.
Re2c leverer "standard" filer i mappen "include/"
projektet — det forudses, at nyttige definitioner vil samles der
af regulære udtryk, noget i stil med standardbiblioteket.
Indtil videre er der efter anmodning fra brugerne tilføjet en fil med definitioner af Unicode-kategorier. - Muligheden for at generere header-filer med vilkårligt
indhold ved hjælp af indstillingerne "-t —type-header" (eller tilsvarende
konfigurationer) og nye direktiver "/*!header:re2c:on*/" og
"/*!header:re2c:off*/" er blevet tilføjet. Dette kan være nyttigt i tilfælde,
hvor re2c skal generere definitioner af variabler, strukturer og makroer,
der anvendes i andre oversættelsesenheder. - Re2c forstår nu UTF8-litteraler og tegnklasser i regulære udtryk.
Som standard parser re2c udtryk som "∀x ∃y" som
en sekvens af 1-bit ASCII-tegn "e2 88 80 78 20 e2 88 83 79"
(hex-koder), og brugerne må manuelt eskalere Unicode-tegn:
"\\u2200x \\u2203y". Dette er meget ubelejligt og uventet for mange
brugere (hvilket fremgår af de konstant tilbagevendende bugrapporter). Derfor
tilbyder re2c nu indstillingen "—input-encoding {ascii | utf8}",
som gør det muligt at ændre adfærd og parse "∀x ∃y" som
"2200 78 20 2203 79". - Re2c gør nu det muligt at bruge normale re2c-blokke i tilstanden "-r —reuse".
Dette er praktisk, hvis indgangsfilen indeholder mange blokke, og kun en del af dem
har brug for at blive genbrugt. - Der er nu mulighed for at angive formatet for advarsler og fejlmeddelelser
ved hjælp af den nye indstilling "—location-format {gnu | msvc}". GNU-format vises
som "filnavn:linje:kolonne:", mens MSVC-format vises som "filnavn(linje, kolonne)".
Denne mulighed kan være nyttig for IDE-elskere.
Der er også tilføjet en indstilling "—verbose", der viser en kort triumferende meddelelse ved succes. - Kompatibilitetsmodus med flex er blevet forbedret — nogle parsingproblemer og
forkert operatorprioritering i sjældne tilfælde er rettet.
Historisk set gør indstillingen "-F —flex-support" det muligt at skrive kode
i blandet flex- og re2c-stil, hvilket gør den syntaktiske parsing en smule vanskeligere.
Kompatibilitetsmodus med flex bruges sjældent i ny kode,
men re2c fortsætter med at støtte den for bagudkompatibilitet. - Operatoren for subtraktion af tegnklasser "/" anvendes nu
før implementeringen af kodningen, hvilket muliggør anvendelse i flere tilfælde,
hvis der anvendes kodning med variabel længde (f.eks. UTF8). - Outputfilen oprettes nu atomisk: re2c opretter først en midlertidig fil
og skriver resultatet til den, hvorefter den omdøber den midlertidige fil til outputfilen
i én operation. - Dokumentationen er blevet revideret og omskrevet; specifikt er der tilføjet nye
kapitler om
og .
Den nye dokumentation er samlet i form af
med eksempler (de samme kilder vises i manpage og online dokumentation).
Der blev gjort svage forsøg på at forbedre læsbarheden af webstedet på telefoner. - Set fra udviklernes perspektiv har re2c fået et mere omfattende
debuggersystem. Debuggerkoden er nu deaktiveret i release-versioner og
kan aktiveres ved hjælp af configure-valgmuligheden "--enable-debug".
Kilde: opennet.ru
