Ukukhishwa kwejeneretha ye-lexical analyzer ye-re2c 1.2

kwenzeka ukukhululwa re2c, ijeneretha ye-lexical analyzer yamahhala yezilimi ze-C ne-C++. Khumbula ukuthi i-re2c yabhalwa ngo-1993 ngu-Peter Bambulis njengejeneretha yokuhlola ye-lexical analyzers esheshayo, ehlukile kwamanye ama-generator ngesivinini sekhodi ekhiqiziwe kanye ne-interface yomsebenzisi eguquguqukayo ngokungavamile evumela ukuthi abahlaziyi bahlanganiswe kalula nangempumelelo kukhodi ekhona. isisekelo. Kusukela lapho, le phrojekthi iye yathuthukiswa umphakathi futhi iyaqhubeka nokuba yinkundla yokuhlola nokucwaninga emkhakheni wohlelo lolimi oluhlelekile kanye nemishini yombuso elinganiselwe.

Ukulungiselela ukukhululwa kwathatha cishe unyaka wonke. Isikhathi esiningi, njengenjwayelo, besichithwa ekwakheni uhlaka lwetiyori nokubhala
izihloko "Ukukhishwa kwe-Submatch esebenzayo ye-POSIX ku-NFA".
Ama-algorithms achazwe esihlokweni asetshenziswa kulabhulali yokuhlola i-libre2c
(ukwakha umtapo wezincwadi nokuhlolwa kokusebenza kukhutshaziwe ngokuzenzakalelayo futhi kunikwe amandla inketho yokumisa "-vula-libs"). Umtapo wolwazi awuhloselwe ukuncintisana namaphrojekthi akhona afana ne-RE2, kodwa njengenkundla yocwaningo yokuthuthukiswa kwamaphrojekthi amasha.
ama-algorithms (angasetshenziswa ku-re2c noma kwamanye amaphrojekthi). Kuyafaneleka futhi ngokombono wokuhlola, ukulinganisa ukusebenza nokudala izibopho kwezinye izilimi.

Okusunguliwe okuyinhloko kunguqulo ye-re2c 1.2:

  • Kwengezwe indlela entsha eyenziwe lula yokuhlola ukuphela kwedatha yokufaka (“umthetho we-EOF”). Kulokhu, ukucushwa kwe-“re2c:eof” kungeziwe,
    ikuvumela ukuthi ukhethe uhlamvu lwetheminali,
    kanye nomthetho okhethekile “$”, oqalwa uma i-lexer
    ufinyelele ngempumelelo ekupheleni kwedatha yokufaka.
    Ngokomlando, i-re2c inikeza ukukhetha kwezindlela ezimbalwa zokuqinisekisa
    ukuphela kokufakiwe okuhluka ngomkhawulo, ukusebenza kahle kanye nobulula
    izicelo. Indlela entsha yakhelwe ukwenza lula ukubhala ikhodi, kuyilapho
    ngenkathi isebenza ngempumelelo futhi isebenza kabanzi. Izindlela zakudala
    isasebenza futhi ingakhethwa kwezinye izimo.

  • Kwengezwe amandla okufaka amafayela angaphandle kusetshenziswa isiyalezo
    "/*!faka:re2c "file.re" */", lapho okuthi "file.re" kuyigama lefayela okufanele lifakwe. I-Re2c ibheka amafayela ohlwini lwemibhalo lwefayela,
    kanye nasohlwini lwezindlela ezishiwo kusetshenziswa inketho ethi “-I”.
    Amafayela afakiwe angase ahlanganise namanye amafayela.
    I-Re2c inikeza amafayela "ajwayelekile" kuhla lwemibhalo "hlanganisa/".
    iphrojekthi - kulindeleke ukuthi izincazelo eziwusizo ziqongelele lapho
    izinkulumo ezivamile, into efana nomtapo wezincwadi ojwayelekile.
    Kuze kube manje, ngesicelo sabasebenzi, ifayela elilodwa elinezincazelo zezigaba ze-Unicode lingeziwe.

  • Kwengezwe ikhono lokukhiqiza amafayela anhlokweni ngokunganaki
    okuqukethwe usebenzisa izinketho ze-"-t --type-header" (noma ezifanele
    ukucupha) neziqondiso ezintsha "/*!header:re2c:on*/" kanye
    "/*!isihloko:re2c:off*/". Lokhu kungase kube usizo ezimweni lapho
    lapho i-re2c idinga ukukhiqiza izincazelo zokuguquguquka, izakhiwo kanye nama-macros,
    esetshenziswa kwamanye amayunithi okuhumusha.

  • I-Re2c manje iyaqonda i-UTF8 literals kanye nezigaba zezinhlamvu ngezinkulumo ezivamile.
    Ngokuzenzakalelayo, i-re2c idlulisa izinkulumo ezifana nokuthi "∀x ∃y" njenge
    ukulandelana kwezinhlamvu ze-1-bit ASCII “e2 88 80 78 20 e2 88 83 79”
    (amakhodi we-hex), futhi abasebenzisi kufanele babaleke ngesandla izinhlamvu ze-Unicode:
    “\u2200x \\u2203y." Lokhu akulula kakhulu futhi akulindelwe kwabaningi
    abasebenzisi (njengoba kufakazelwa imibiko yesiphazamisi engashintshi). Ngakho manje
    i-re2c inikeza inketho "--input-encoding {ascii | utf8}",
    okukuvumela ukuthi uguqule ukuziphatha futhi uhlukanise okuthi “∀x ∃y” njenge
    "2200 78 20 2203 79."

  • I-Re2c manje ivumela amabhulokhi we-re2c avamile ukuthi asetshenziswe kumodi ethi "-r --reuse".
    Lokhu kulula uma ifayela lokufaka liqukethe amabhlogo amaningi futhi amanye awo kuphela
    idinga ukusetshenziswa kabusha.

  • Manje ungasetha ifomethi yezixwayiso nemilayezo yephutha
    usebenzisa inketho entsha "--location-format {gnu | msvc}". Ifomethi ye-GNU iyaboniswa
    ngokuthi "igama lefayela:umugqa:ikholomu:", kanye nefomethi ye-MSVC njengokuthi "igama lefayela(umugqa,ikholomu)".
    Lesi sici singase sibe usizo kubathandi be-IDE.
    Inketho ethi "--verbose" nayo yengeziwe, ebonisa umlayezo omfushane wokunqoba uma uphumelele.

  • Imodi “yokuhambisana” ene-flex isithuthukisiwe - amanye amaphutha okuhlaziya aselungisiwe futhi
    ukulandelwa komsebenzisi okungalungile ezimweni ezingavamile.
    Ngokomlando, inketho ethi "-F --flex-support" ikuvumele ukuthi ubhale ikhodi
    kuxutshwe ngesitayela esiguqukayo nesitayela se-re2c, okwenza ukuhlukanisa kube nzima.
    Imodi yokuhambisana ye-Flex ayivamisile ukusetshenziswa kukhodi entsha,
    kodwa i-re2c iyaqhubeka nokuyisekela ukuze ihambisane nemuva.

  • I-opharetha yokususa yesigaba sohlamvu "/" manje isiyasebenza
    ngaphambi kokwandisa umbhalo wekhodi, okuvumela ukuthi usetshenziswe enanini elikhulu lamacala,
    uma kusetshenziswa umbhalo wekhodi wobude bezinhlamvu eziguquguqukayo (isibonelo i-UTF8).

  • Ifayela lokuphumayo manje selidalwe nge-athomu: i-re2c idala ifayela lesikhashana kuqala
    bese ibhala umphumela kuyo, bese iqamba kabusha ifayela lesikhashana kokuphumayo
    ukuhlinzwa okukodwa.

  • Amadokhumenti aqedwa futhi abhalwa kabusha; ikakhulukazi, kwengezwe ezintsha
    izahluko mayelana http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и mayelana nezindlela zokubheka ukuphela kwedatha yokufaka.
    Amadokhumenti amasha aqoqwa efomini
    umhlahlandlela ophelele wekhasi elilodwa
    ngezibonelo (imithombo efanayo inikezwa ku-manpage nakumadokhumenti aku-inthanethi).
    Imizamo embi yenziwe yokuthuthukisa ukufundeka kwesayithi kumafoni.

  • Ngokombono wonjiniyela, i-re2c ithole uhlelo olungaphansi oluphelele kakhulu
    ukulungisa iphutha Ikhodi yokususa iphutha manje ikhutshaziwe ekwakhiweni kokukhishwa kanye
    inganikwa amandla kusetshenziswa inketho yokumisa "--enable-debug".

Source: opennet.ru

Engeza amazwana