Paglabas ng re2c 1.2 lexical analyzer generator

naganap pakawalan re2c, isang libreng lexical analyzer generator para sa C at C++ na mga wika. Alalahanin na ang re2c ay isinulat noong 1993 ni Peter Bambulis bilang isang eksperimentong generator ng napakabilis na mga lexical analyzer, na naiiba sa iba pang mga generator sa bilis ng nabuong code at isang hindi pangkaraniwang kakayahang umangkop na user interface na nagpapahintulot sa mga analyzer na maging madali at mahusay na maisama sa isang umiiral na code base. Simula noon, ang proyekto ay binuo ng komunidad at patuloy na isang plataporma para sa mga eksperimento at pananaliksik sa larangan ng mga pormal na gramatika at may hangganang makina ng estado.

Halos isang buong taon ang paghahanda para sa pagpapalaya. Karamihan sa mga oras, gaya ng dati, ay ginugol sa pagbuo ng isang teoretikal na balangkas at pagsulat
mga artikulo"Mahusay na POSIX Submatch Extraction sa NFA".
Ang mga algorithm na inilarawan sa artikulo ay ipinatupad sa eksperimental na library libre2c
(Ang pagbuo ng library at mga pagsubok sa pagganap ay hindi pinagana bilang default at pinagana ng opsyon sa pag-configure na "β€”enable-libs"). Ang aklatan ay hindi inilaan bilang isang katunggali sa mga kasalukuyang proyekto tulad ng RE2, ngunit bilang isang platform ng pananaliksik para sa pagbuo ng mga bago.
mga algorithm (na maaaring magamit sa re2c o sa iba pang mga proyekto). Maginhawa rin ito mula sa punto ng view ng pagsubok, pagsukat ng pagganap at paglikha ng mga binding sa iba pang mga wika.

Mga pangunahing inobasyon sa bersyon re2c 1.2:

  • Nagdagdag ng bagong pinasimpleng paraan para sa pagsuri sa dulo ng input data (β€œEOF rule”). Para dito, idinagdag ang configuration na "re2c:eof",
    nagpapahintulot sa iyo na piliin ang terminal na character,
    at isang espesyal na panuntunang "$", na nati-trigger kung ang lexer
    matagumpay na naabot ang dulo ng input data.
    Sa kasaysayan, ang re2c ay nagbibigay ng pagpipilian ng ilang paraan ng pag-verify para sa
    pagtatapos ng mga input na nag-iiba sa limitasyon, kahusayan at pagiging simple
    mga aplikasyon. Ang bagong paraan ay idinisenyo upang gawing simple ang pagsulat ng code, habang
    habang nananatiling epektibo at malawak na naaangkop. Lumang paraan
    gumagana pa rin at maaaring mas gusto sa ilang mga kaso.

  • Idinagdag ang kakayahang magsama ng mga panlabas na file gamit ang isang direktiba
    "/*!include:re2c "file.re" */", kung saan ang "file.re" ay ang pangalan ng file na isasama. Ang Re2c ay naghahanap ng mga file sa kasamang direktoryo ng file,
    pati na rin sa listahan ng mga landas na tinukoy gamit ang opsyong "-I".
    Maaaring may kasamang mga file ang mga kasamang file.
    Nagbibigay ang Re2c ng "standard" na mga file sa "include/" na direktoryo
    proyekto - inaasahan na ang mga kapaki-pakinabang na kahulugan ay maipon doon
    mga regular na expression, tulad ng karaniwang library.
    Sa ngayon, sa kahilingan ng mga manggagawa, isang file na may mga kahulugan ng mga kategorya ng Unicode ang naidagdag.

  • Idinagdag ang kakayahang bumuo ng mga file ng header na may arbitrary
    nilalaman gamit ang mga opsyon na "-t --type-header" (o naaangkop
    configuration) at mga bagong direktiba na "/*!header:re2c:on*/" at
    "/*!header:re2c:off*/". Ito ay maaaring maging kapaki-pakinabang sa mga kaso kung saan
    kapag ang re2c ay kailangang bumuo ng mga kahulugan ng mga variable, istruktura at macro,
    ginagamit sa ibang mga yunit ng pagsasalin.

  • Naiintindihan na ngayon ng Re2c ang mga literal na UTF8 at mga klase ng character sa mga regular na expression.
    Bilang default, pina-parse ng re2c ang mga expression tulad ng "βˆ€x βˆƒy" bilang
    pagkakasunud-sunod ng mga 1-bit na ASCII na character "e2 88 80 78 20 e2 88 83 79"
    (mga hex code), at ang mga user ay kailangang makatakas nang manu-mano sa mga Unicode character:
    "\\u2200x\\u2203y". Ito ay napaka-inconvenient at hindi inaasahan para sa marami
    mga user (tulad ng pinatunayan ng patuloy na mga ulat ng bug). At ngayon
    Ang re2c ay nagbibigay ng opsyong "--input-encoding {ascii | utf8}",
    na nagpapahintulot sa iyo na baguhin ang pag-uugali at i-parse ang "βˆ€x βˆƒy" bilang
    β€œ2200 78 20 2203 79.”

  • Pinapayagan na ngayon ng Re2c ang mga regular na bloke ng re2c na magamit sa mode na "-r --reuse".
    Ito ay maginhawa kung ang input file ay naglalaman ng maraming mga bloke at ilan lamang sa mga ito
    kailangang gamitin muli.

  • Maaari mo na ngayong itakda ang format ng mga babala at mensahe ng error
    gamit ang bagong opsyon na "--location-format {gnu | msvc}". Ang GNU format ay ipinapakita
    bilang "filename:line:column:", at ang MSVC format bilang "filename(line,column)".
    Maaaring maging kapaki-pakinabang ang feature na ito para sa mga mahilig sa IDE.
    Nagdagdag din ng "--verbose" na opsyon, na nagpapakita ng maikling mensahe ng tagumpay kung matagumpay.

  • Ang "compatibility" mode na may flex ay napabuti - ilang mga error sa pag-parse ay naayos at
    hindi tamang operator precedence sa mga bihirang kaso.
    Sa kasaysayan, pinapayagan ka ng opsyong "-F --flex-suppor" na magsulat ng code
    halo-halong may flex style at re2c style, na nagpapahirap sa pag-parse.
    Ang Flex compatibility mode ay bihirang ginagamit sa bagong code,
    ngunit patuloy itong sinusuportahan ng re2c para sa pabalik na pagkakatugma.

  • Nalalapat na ngayon ang operator ng pagbabawas ng klase ng character na "/".
    bago palawakin ang pag-encode, na nagpapahintulot na magamit ito sa mas malaking bilang ng mga kaso,
    kung ginagamit ang isang variable na haba ng character na encoding (halimbawa UTF8).

  • Ang output file ay nilikha na ngayon nang atomically: ang re2c ay lumilikha muna ng pansamantalang file
    at isinusulat ang resulta dito, at pagkatapos ay pinapalitan ang pangalan ng pansamantalang file sa output
    isang operasyon.

  • Ang dokumentasyon ay nakumpleto at muling isinulat; sa partikular, ang mga bago ay idinagdag
    mga kabanata tungkol sa http://re2c.org/manual/manual.html#buffer-refilling Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°
    ΠΈ tungkol sa mga paraan upang suriin ang pagtatapos ng data ng pag-input.
    Ang bagong dokumentasyon ay kinokolekta sa form
    isang komprehensibong gabay sa isang pahina
    na may mga halimbawa (ang parehong mga mapagkukunan ay nai-render sa manpage at sa online na dokumentasyon).
    Ang mga hindi magandang pagtatangka ay ginawa upang mapabuti ang pagiging madaling mabasa ng site sa mga telepono.

  • Mula sa pananaw ng mga developer, nakakuha ang re2c ng mas kumpletong subsystem
    pag-debug Naka-disable na ngayon ang debugging code sa mga release build at
    maaaring paganahin gamit ang opsyon sa pag-configure na "--enable-debug".

Pinagmulan: opennet.ru

Magdagdag ng komento