Lëshimi i gjeneratorit të analizuesit leksikor re2c 1.2

Ndodhi lirimin re2c, një gjenerues falas për analizues leksikor për gjuhët C dhe C++. Le të kujtojmë se re2c u shkrua në vitin 1993 nga Peter Bambulis si një gjenerator eksperimental i analizuesve shumë të shpejtë leksikor, që ndryshon nga gjeneratorët e tjerë në shpejtësinë e kodit të gjeneruar dhe një ndërfaqe përdoruesi jashtëzakonisht fleksibël që lejon analizuesit të integrohen lehtësisht dhe me efikasitet në një ekzistues. bazën 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.

Përgatitja për lëshimin zgjati 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
artikuj "Nxjerrja efikase e nënpërputhjes POSIX në NFA".
Algoritmet e përshkruara në artikull janë zbatuar në bibliotekën eksperimentale libre2c
(ndërtimi i bibliotekës dhe testet e performancës është i çaktivizuar si parazgjedhje dhe aktivizohet nga opsioni i konfigurimit "--enable-libs"). Biblioteka nuk synohet si konkurrente e projekteve ekzistuese si RE2, por si një platformë kërkimore për zhvillimin e projekteve të reja.
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, matjes së performancës dhe krijimit të lidhjeve me gjuhë të tjera.

Risitë kryesore në versionin re2c 1.2:

  • U shtua një metodë e re e thjeshtuar për kontrollimin e fundit të të dhënave hyrëse (“rregulli EOF”). Për këtë, është shtuar konfigurimi "re2c:eof",
    ju lejon të zgjidhni karakterin e terminalit,
    dhe një rregull special “$”, i cili aktivizohet 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" është emri i skedarit që do të përfshihet. Re2c kërkon skedarë në drejtorinë e skedarit përfshirë,
    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ë drejtorinë "include/".
    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
    sekuencë 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 opsionin "--input-encoding {ascii | utf8}",
    i cili ju lejon të ndryshoni sjelljen dhe të analizoni "∀x ∃y" si
    "2200 78 20 2203 79."

  • Re2c tani lejon që blloqet e rregullta re2c të përdoren në modalitetin "-r --reuse".
    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 {gnu | msvc}". Shfaqet formati GNU
    si "filename:line:column:", dhe formati MSVC si "filename(line,column)".
    Kjo veçori mund të jetë e dobishme për adhuruesit e IDE.
    Është shtuar gjithashtu një opsion "--verbose", i cili shfaq 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-suppor" ju lejoi të shkruani kod
    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.

  • Tani zbatohet operatori i zbritjes së klasës së karaktereve "/".
    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
    kapitujt rreth http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и rreth mënyrave për të kontrolluar përfundimin e të dhënave hyrëse.
    Dokumentacioni i ri është mbledhur në formular
    një udhëzues 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 e konfigurimit "--enable-debug".

Burimi: opennet.ru

Shto një koment