re2c 1.2

Të premten, më 2 gusht, u publikua re2c, një gjenerues falas i analizuesve leksikorë për gjuhët C dhe C++. Si kujtesë, re2c u shkrua në 1993 nga Peter Bamboulis si një gjenerator eksperimental i analizuesve shumë të shpejtë leksikorë, i dalluar nga gjeneratorët e tjerë nga shpejtësia e kodit të gjeneruar dhe një ndërfaqe përdoruesi jashtëzakonisht fleksibël që lejon analizuesit të futen lehtësisht dhe me efikasitet në një baza ekzistuese e kodit. Që atëherë, projekti është zhvilluar nga komuniteti dhe vazhdon të jetë një platformë për eksperimente dhe kërkime në fushën e gramatikave formale dhe makinave me gjendje të fundme.

Risitë kryesore në versionin 1.2:

  • U shtua një mënyrë e re (e thjeshtuar) për të kontrolluar përfundimin e të dhënave hyrëse
    (Anglisht "Rregulli EOF").
    Për këtë, është shtuar konfigurimi re2c:eof,
    ju lejon të zgjidhni karakterin e terminalit,
    dhe një rregull i veçantë $ që ndizet nëse lexeri
    arriti me sukses në fund të të dhënave hyrëse.
    Historikisht, re2c ofron një zgjedhje të disa metodave të verifikimit për
    fundi i inputeve ndryshon në kufizim, efikasitet dhe thjeshtësi
    aplikacionet. Metoda e re është krijuar për të thjeshtuar shkrimin e kodit, ndërsa
    duke mbetur efektiv dhe gjerësisht i zbatueshëm. Mënyra të vjetra
    ende funksionon dhe mund të preferohet në disa raste.

  • U shtua aftësia për të përfshirë skedarë të jashtëm duke përdorur një direktivë
    /*!include:re2c "file.re" */ ku file.re
    ky është emri i skedarit të përfshirjes. Re2c kërkon skedarë në drejtorinë përfshirë skedarët,
    si dhe në listën e shtigjeve të specifikuara duke përdorur opsionin -I.
    Skedarët e përfshirë mund të përfshijnë skedarë të tjerë.
    Re2c ofron skedarë "standard" në direktorinë e përfshirjes/
    projekti - pritet që aty të grumbullohen përkufizime të dobishme
    shprehje të rregullta, diçka si biblioteka standarde.
    Deri më tani, me kërkesë të punëtorëve, është shtuar një dosje me përkufizimet e kategorive të Unicode.

  • U shtua aftësia për të gjeneruar skedarë të kokës me arbitrare
    përmbajtje duke përdorur opsionet -t --type-header (ose të përshtatshme
    konfigurimet) dhe direktivat e reja /*!header:re2c:on*/ dhe
    /*!header:re2c:off*/. Kjo mund të jetë e dobishme në rastet kur
    kur re2c duhet të gjenerojë përkufizime të variablave, strukturave dhe makrove,
    përdoret në njësi të tjera përkthimi.

  • Re2c tani kupton fjalë për fjalë UTF8 dhe klasat e karaktereve në shprehje të rregullta.
    Si parazgjedhje, re2c analizon shprehjet si "∀x ∃y" si.
    sekuenca e karaktereve ASCII 1-bit e2 88 80 78 20 e2 88 83 79
    (kodet hex), dhe përdoruesit duhet t'i shpëtojnë karaktereve të Unicode manualisht:
    "u2200x u2203y". Kjo është shumë e papërshtatshme dhe e papritur për shumë njerëz
    përdoruesit (siç dëshmohet nga raportet e vazhdueshme të gabimeve). Pra tani
    re2c ofron një opsion ---input-encoding ,
    e cila ju lejon të ndryshoni sjelljen dhe të analizoni "∀x ∃y" si
    2200 78 20 2203 79.

  • Re2c tani lejon përdorimin e blloqeve të rregullta re2c në modalitetin -r --ripërdorim.
    Kjo është e përshtatshme nëse skedari hyrës përmban shumë blloqe dhe vetëm disa prej tyre
    duhet të ripërdoret.

  • Tani mund të vendosni formatin e paralajmërimeve dhe mesazheve të gabimit
    duke përdorur opsionin e ri --location-format . Shfaqet formati GNU
    si emri i skedarit: rreshti: kolona: dhe formati MSVC si emri i skedarit (linja, kolona).
    Kjo veçori mund të jetë e dobishme për adhuruesit e IDE.
    Është shtuar gjithashtu një opsion --verbose, i cili printon një mesazh të shkurtër fitoreje nëse është i suksesshëm.

  • Mënyra e "përputhshmërisë" me flex është përmirësuar - disa gabime analizimi janë rregulluar dhe
    përparësi e gabuar e operatorit në raste të rralla.
    Historikisht, opsioni -F --flex-support ju lejoi të shkruani kodin
    e përzier në stilin flex dhe stilin re2c, gjë që e bën analizimin pak të vështirë.
    Modaliteti i përputhshmërisë Flex përdoret rrallë në kodin e ri,
    por re2c vazhdon ta mbështesë atë për pajtueshmërinë prapa.

  • Operatori i zbritjes së klasës së karaktereve / tani zbatohet
    përpara se të zgjerohet kodimi, i cili lejon që ai të përdoret në një numër më të madh rastesh,
    nëse përdoret një kodim me gjatësi të ndryshueshme karakteresh (për shembull UTF8).

  • Skedari i daljes tani krijohet në mënyrë atomike: re2c krijon së pari një skedar të përkohshëm
    dhe shkruan rezultatin në të, dhe më pas riemëron skedarin e përkohshëm në dalje
    një operacion.

  • Dokumentacioni u plotësua dhe u rishkrua; në veçanti u shtuan të reja
    kapituj rreth mbushjes së tamponit
    и rreth mënyrave për të kontrolluar përfundimin e të dhënave hyrëse.
    Dokumentacioni i ri është mbledhur në formular
    një manual gjithëpërfshirës me një faqe
    me shembuj (të njëjtat burime janë dhënë në faqen e menaxhimit dhe në dokumentacionin online).
    Janë bërë përpjekje të dobëta për të përmirësuar lexueshmërinë e faqes në telefon.

  • Nga këndvështrimi i zhvilluesve, re2c ka fituar një nënsistem më të plotë
    korrigjimi Kodi i korrigjimit tani është i çaktivizuar në versionet e lëshimit dhe
    mund të aktivizohet duke përdorur opsionin configure --enable-debug.

Ky publikim zgjati shumë - pothuajse një vit të tërë.
Pjesa më e madhe e kohës, si gjithmonë, u shpenzua për zhvillimin e një kuadri teorik dhe shkrim
Artikull "Nxjerrja efikase e nënndeshjes POSIX në NFA".
Algoritmet e përshkruara në artikull janë zbatuar në bibliotekën eksperimentale libre2c
(ndërtimi i bibliotekës dhe standardeve është i çaktivizuar si parazgjedhje dhe aktivizohet nga opsioni i konfigurimit
--enable-libs). Biblioteka nuk është konceptuar si konkurrente e ekzistueses
projekte si RE2, por si një platformë kërkimore për zhvillimin e të rejave
algoritme (të cilat më pas mund të përdoren në re2c ose në projekte të tjera).
Është gjithashtu i përshtatshëm nga pikëpamja e testimit, standardeve dhe krijimit të lidhjeve me gjuhë të tjera.

Faleminderit nga zhvilluesit e re2c për të gjithë ata që ndihmuan të realizohej ky version,
dhe komunitetit në përgjithësi për ide, raporte të gabimeve, arnime, moral, etj. ;]

Burimi: linux.org.ru

Shto një koment