Kutolewa kwa jenereta ya kichanganuzi cha kimsamiati cha re2c 1.2

ilifanyika kutolewa re2c, jenereta isiyolipishwa ya uchanganuzi wa kileksika kwa lugha za C na C++. Kumbuka kwamba re2c iliandikwa mnamo 1993 na Peter Bambulis kama jenereta ya majaribio ya vichanganuzi vya haraka vya kileksika, tofauti na jenereta zingine kwa kasi ya nambari iliyotengenezwa na kiolesura cha mtumiaji kinachobadilika isivyo kawaida ambacho huruhusu vichanganuzi kuunganishwa kwa urahisi na kwa ufanisi katika msimbo uliopo. msingi. Tangu wakati huo, mradi umeendelezwa na jamii na unaendelea kuwa jukwaa la majaribio na utafiti katika uwanja wa sarufi rasmi na mashine za hali ya mwisho.

Maandalizi ya kutolewa yalichukua karibu mwaka mzima. Wakati mwingi, kama kawaida, ilitumika kuunda mfumo wa kinadharia na uandishi
makala"Uchimbaji Bora wa Submatch ya POSIX kwenye NFA".
Kanuni zilizofafanuliwa katika makala zinatekelezwa katika maktaba ya majaribio libre2c
(kujenga maktaba na majaribio ya utendaji kumezimwa kwa chaguo-msingi na kuwezeshwa na chaguo la kusanidi "-enable-libs"). Maktaba haikusudiwa kuwa mshindani wa miradi iliyopo kama RE2, lakini kama jukwaa la utafiti la ukuzaji mpya.
algorithms (ambayo inaweza kutumika katika re2c au katika miradi mingine). Pia ni rahisi kutoka kwa mtazamo wa kupima, kupima utendaji na kuunda vifungo kwa lugha nyingine.

Ubunifu kuu katika toleo la re2c 1.2:

  • Imeongeza mbinu mpya iliyorahisishwa ya kuangalia mwisho wa data ya ingizo ("sheria ya EOF"). Kwa hili, usanidi wa "re2c:eof" umeongezwa,
    hukuruhusu kuchagua herufi ya terminal,
    na kanuni maalum "$", ambayo inasababishwa ikiwa lexer
    ilifanikiwa kufikia mwisho wa data ya ingizo.
    Kihistoria, re2c hutoa chaguo la mbinu kadhaa za uthibitishaji kwa
    mwisho wa pembejeo zinazotofautiana katika ukomo, ufanisi na urahisi
    maombi. Njia mpya imeundwa ili kurahisisha msimbo wa uandishi, wakati
    huku ikibaki kuwa na ufanisi na inatumika sana. Njia za zamani
    bado inafanya kazi na inaweza kupendekezwa katika hali zingine.

  • Imeongeza uwezo wa kujumuisha faili za nje kwa kutumia maagizo
    "/*! ni pamoja na:re2c "file.re" */", ambapo "file.re" ni jina la faili litakalojumuishwa. Re2c hutafuta faili kwenye saraka ya faili inayojumuisha,
    na vile vile katika orodha ya njia zilizoainishwa kwa kutumia chaguo la "-I".
    Faili zilizojumuishwa zinaweza kujumuisha faili zingine.
    Re2c hutoa faili "za kawaida" kwenye saraka ya "pamoja na/".
    mradi - inatarajiwa kwamba ufafanuzi muhimu utajilimbikiza hapo
    maneno ya kawaida, kitu kama maktaba ya kawaida.
    Hadi sasa, kwa ombi la wafanyakazi, faili moja yenye ufafanuzi wa makundi ya Unicode imeongezwa.

  • Imeongeza uwezo wa kutengeneza faili za kichwa bila mpangilio
    yaliyomo kwa kutumia chaguzi za "-t --type-header" (au inafaa
    usanidi) na maagizo mapya "/*!header:re2c:on*/" na
    "/*!kichwa:re2c:off*/". Hii inaweza kuwa na manufaa katika hali ambapo
    wakati re2c inahitaji kutoa ufafanuzi wa anuwai, miundo na macros,
    kutumika katika vitengo vingine vya tafsiri.

  • Re2c sasa inaelewa herufi halisi za UTF8 na madarasa ya wahusika katika misemo ya kawaida.
    Kwa chaguo-msingi, re2c huchanganua misemo kama "βˆ€x βˆƒy" kama
    mlolongo wa herufi 1-bit ASCII β€œe2 88 80 78 20 e2 88 83 79”
    (nambari za hex), na watumiaji wanapaswa kutoroka herufi za Unicode kwa mikono:
    "\\u2200x \\u2203y." Hili ni jambo lisilofaa na lisilotarajiwa kwa wengi
    watumiaji (kama inavyothibitishwa na ripoti za mara kwa mara za hitilafu). Hivyo sasa
    re2c hutoa chaguo "--input-encoding {ascii | utf8}",
    ambayo hukuruhusu kubadilisha tabia na kuchanganua "βˆ€x βˆƒy" kama
    "2200 78 20 2203 79."

  • Re2c sasa inaruhusu vizuizi vya kawaida vya re2c kutumika katika hali ya "-r --reuse".
    Hii ni rahisi ikiwa faili ya pembejeo ina vizuizi vingi na ni baadhi yao tu
    inahitaji kutumika tena.

  • Sasa unaweza kuweka umbizo la maonyo na ujumbe wa makosa
    kwa kutumia chaguo jipya "--location-format {gnu | msvc}". Umbizo la GNU linaonyeshwa
    kama "filename:line:column:", na umbizo la MSVC kama "filename(line,column)".
    Kipengele hiki kinaweza kuwa muhimu kwa wapenzi wa IDE.
    Chaguo la "--verbose" pia limeongezwa, ambalo linaonyesha ujumbe mfupi wa ushindi ikiwa umefaulu.

  • Hali ya "utangamano" na flex imeboreshwa - baadhi ya hitilafu za uchanganuzi zimerekebishwa na
    utangulizi usio sahihi wa waendeshaji katika matukio machache.
    Kihistoria, chaguo la "-F --flex-support" lilikuruhusu kuandika msimbo
    iliyochanganywa kwa mtindo wa kunyumbulika na mtindo wa re2c, ambao hufanya uchanganuzi kuwa mgumu kidogo.
    Njia ya utangamano ya Flex haitumiki sana katika nambari mpya,
    lakini re2c inaendelea kuiunga mkono kwa utangamano wa nyuma.

  • Opereta ya kutoa ya darasa la wahusika "/" sasa inatumika
    kabla ya kupanua usimbuaji, ambayo inaruhusu kutumika katika idadi kubwa ya kesi,
    ikiwa usimbaji wa urefu wa herufi tofauti unatumika (kwa mfano UTF8).

  • Faili ya pato sasa imeundwa kwa atomi: re2c huunda faili ya muda kwanza
    na huandika matokeo ndani yake, na kisha kubadilisha faili ya muda kwa pato
    operesheni moja.

  • Nyaraka zilikamilishwa na kuandikwa upya; hasa, mpya ziliongezwa
    sura kuhusu http://re2c.org/manual/manual.html#buffer-refilling Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°
    ΠΈ kuhusu njia za kuangalia mwisho wa data ya ingizo.
    Nyaraka mpya zinakusanywa katika fomu
    mwongozo wa kina wa ukurasa mmoja
    na mifano (vyanzo sawa vinatolewa katika manpage na katika nyaraka za mtandaoni).
    Majaribio duni yamefanywa ili kuboresha usomaji wa tovuti kwenye simu.

  • Kwa mtazamo wa wasanidi programu, re2c imepata mfumo mdogo kamili zaidi
    utatuzi Msimbo wa utatuzi sasa umezimwa katika miundo ya toleo na
    inaweza kuwezeshwa kwa kutumia chaguo la kusanidi "--enable-debug".

Chanzo: opennet.ru

Kuongeza maoni