Kutolewa kwa jenereta ya kichanganuzi cha kimsamiati cha re2c 2.0

ilifanyika kutolewa re2c 2.0, jenereta isiyolipishwa ya uchanganuzi wa kileksika kwa lugha za C na C++. Mradi wa re2c hapo awali uliundwa mnamo 1993 na Peter Bamboulis kama jenereta ya majaribio ya vichanganuzi vya kileksika vya haraka sana, vinavyotofautishwa na jenereta zingine kwa kasi ya msimbo uliotengenezwa na kiolesura chenye kunyumbulika isivyo kawaida cha mtumiaji ambacho huruhusu vichanganuzi kupachikwa kwa urahisi na kwa ufanisi kwenye kiolesura kilichopo. msingi wa kanuni. 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.

Mabadiliko kuu:

  • Usaidizi ulioongezwa kwa lugha ya Go (imewezeshwa na chaguo la "-lang go" kwa re2c, au kama programu tofauti ya re2go). Hati za C na Go hutolewa kutoka kwa maandishi sawa, lakini kwa mifano tofauti ya nambari. Mfumo mdogo wa kuzalisha msimbo katika re2c umeundwa upya kabisa, ambayo inapaswa kurahisisha kutumia lugha mpya katika siku zijazo.
  • Imeongeza mfumo mbadala wa ujenzi kwenye CMake (asante ligfx!). Majaribio ya kutafsiri re2c hadi CMake yamefanywa kwa muda mrefu, lakini hadi ligfx hakuna aliyependekeza suluhisho kamili. Mfumo wa zamani wa ujenzi wa Autotools unaendelea kuungwa mkono na kutumiwa, na hakuna mipango ya kuuacha katika siku zijazo zinazoonekana (kwa sehemu ili kuzuia kuunda shida kwa watengenezaji wa usambazaji, kwa sababu mfumo wa zamani wa ujenzi ni thabiti na mafupi zaidi kuliko ule mpya. ) Mifumo yote miwili inajaribiwa kwa kutumia Travis CI.
  • Imeongeza uwezo wa kubainisha msimbo wa kiolesura katika usanidi unapotumia API ya jumla. Hapo awali, API nyingi zilipaswa kubainishwa katika mfumo wa chaguo za kukokotoa au makro ya chaguo la kukokotoa. Sasa zinaweza kubainishwa kwa njia ya mifuatano isiyo na maana yenye vigezo vya kiolezo vilivyoitwa "@@{jina}" au kwa urahisi "@@" (ikiwa kuna kigezo kimoja tu na hakuna utata). Mtindo wa API umewekwa na usanidi wa mtindo wa re2c:api:(thamani ya utendakazi hubainisha mtindo wa utendaji kazi, na umbo huria hubainisha mtindo wa kiholela).
  • Uendeshaji wa chaguo la "-c", "-start-conditions" umeboreshwa, kukuwezesha kuchanganya lexers kadhaa zilizounganishwa katika block moja ya re2c. Sasa unaweza kutumia vizuizi vya kawaida pamoja na vile vya masharti na kufafanua vizuizi kadhaa vya masharti visivyohusiana katika faili moja. Uendeshaji ulioboreshwa wa chaguo la "-r", "--tumia tena" (kutumia tena nambari kutoka kwa kizuizi kimoja kwenye vizuizi vingine) pamoja na "-c", "--start-conditions" na "-f", "-- hali ya kuhifadhi" chaguzi (lexer ya serikali ambayo inaweza kukatizwa wakati wowote na kuendelea na utekelezaji baadaye).
  • Ilirekebisha hitilafu katika algoriti iliyoongezwa hivi majuzi ya mwisho wa ingizo (sheria ya EOF), ambayo katika hali nadra ilisababisha uchakataji usio sahihi wa sheria zinazoingiliana.
  • Mchakato wa bootstrap umerahisishwa. Hapo awali, mfumo wa ujenzi ulijaribu kupata kwa nguvu re2c iliyojengwa tayari ambayo inaweza kutumika kujijenga upya. Hii ilisababisha utegemezi usio sahihi (kwa sababu grafu ya utegemezi ilikuwa ya nguvu, ambayo mifumo mingi ya kujenga haipendi). Sasa, ili kuunda upya lexers, unahitaji kusanidi kwa uwazi mfumo wa kujenga na kuweka tofauti ya RE2C_FOR_BUILD.

Chanzo: opennet.ru

Kuongeza maoni