Kaniadtong Biyernes, Agosto 2, ang re2c, usa ka libre nga generator sa lexical analisador alang sa C ug C++ nga mga pinulongan, gipagawas. Isip usa ka pahinumdom, ang re2c gisulat niadtong 1993 ni Peter Bamboulis isip usa ka eksperimento nga generator sa paspas kaayo nga mga lexical analisador, nga gipalahi gikan sa ubang mga generator pinaagi sa katulin sa namugna nga code ug usa ka talagsaon nga flexible user interface nga nagtugot sa mga analisador nga dali ug episyente nga masulod sa usa ka kasamtangan nga code base. Sukad niadto, ang proyekto gipalambo sa komunidad ug nagpadayon nga usa ka plataporma alang sa mga eksperimento ug panukiduki sa natad sa pormal nga gramatika ug limitado nga mga makina sa estado.

Panguna nga mga inobasyon sa bersyon 1.2:

  • Gidugang ang usa ka bag-o (gisimple) nga paagi aron masusi ang katapusan sa data sa pag-input
    (Iningles nga β€œEOF rule”).
    Alang niini, ang re2c:eof configuration gidugang,
    nagtugot kanimo sa pagpili sa terminal nga karakter,
    ug usa ka espesyal nga $ lagda nga nagdilaab kung ang lexer
    malampuson nga nakaabot sa katapusan sa input data.
    Sa kasaysayan, ang re2c naghatag usa ka kapilian sa daghang mga pamaagi sa pag-verify alang sa
    katapusan sa mga input nga lainlain sa limitasyon, kahusayan ug kayano
    mga aplikasyon. Ang bag-ong pamaagi gilaraw aron pasimplehon ang pagsulat sa code, samtang
    samtang nagpabilin nga epektibo ug kaylap nga magamit. Karaang mga paagi
    nagtrabaho gihapon ug mahimong gipalabi sa pipila ka mga kaso.

  • Gidugang ang abilidad sa paglakip sa mga eksternal nga file gamit ang usa ka direktiba
    /*!include:re2c "file.re" */ diin file.re
    kini ang ngalan sa naglakip nga file. Ang Re2c nangita alang sa mga file sa lakip ang direktoryo sa file,
    ingon man usab sa lista sa mga agianan nga gitakda gamit ang -I nga kapilian.
    Ang gilakip nga mga file mahimong maglakip sa ubang mga file.
    Ang Re2c naghatag og "standard" nga mga file sa include/ directory
    proyekto - gilauman nga ang mapuslanon nga mga kahulugan magtigum didto
    regular nga mga ekspresyon, sama sa standard library.
    Hangtod karon, sa hangyo sa mga trabahante, usa ka file nga adunay mga kahulugan sa mga kategorya sa Unicode ang gidugang.

  • Gidugang ang abilidad sa pagmugna og mga file sa header nga adunay arbitraryo
    sulod gamit ang -t --type-header nga mga opsyon (o angay
    configurations) ug bag-ong mga direktiba /*!header:re2c:on*/ ug
    /*!header:re2c:off*/. Mahimong mapuslanon kini sa mga kaso diin
    kung ang re2c kinahanglan nga maghimo mga kahulugan sa mga variable, istruktura ug macros,
    gigamit sa ubang mga yunit sa paghubad.

  • Nasabtan na karon ni Re2c ang mga literal nga UTF8 ug mga klase sa karakter sa mga regular nga ekspresyon.
    Sa kasagaran, gi-parse sa re2c ang mga ekspresyon sama sa "βˆ€x βˆƒy" ingon.
    han-ay sa 1-bit ASCII nga mga karakter e2 88 80 78 20 e2 88 83 79
    (hex codes), ug ang mga tiggamit kinahanglan nga makaikyas sa Unicode nga mga karakter sa mano-mano:
    "u2200x u2203y". Kini dili kombenyente ug wala damha alang sa kadaghanan
    tiggamit (ingon nga ebidensya sa kanunay nga mga taho sa bug). Busa karon
    Naghatag ang re2c og --input-encoding nga kapilian ,
    nga nagtugot kanimo sa pag-usab sa kinaiya ug pag-parse "βˆ€x βˆƒy" ingon
    2200 78 20 2203 79.

  • Gitugotan na karon sa Re2c ang paggamit sa regular nga mga bloke sa re2c sa -r --reuse mode.
    Kombenyente kini kung ang input file adunay daghang mga bloke ug pipila ra niini
    kinahanglan nga gamiton pag-usab.

  • Karon mahimo nimong itakda ang format sa mga pasidaan ug mga mensahe sa sayup
    gamit ang bag-ong --location-format nga kapilian . GNU format gipakita
    isip filename:line:column:, ug ang MSVC format isip filename(linya,kolum).
    Kini nga bahin mahimong mapuslanon alang sa mga mahigugmaon sa IDE.
    Gidugang usab ang usa ka --verbose nga kapilian, nga nagpatik sa usa ka mubo nga mensahe sa kadaugan kung malampuson.

  • Ang "compatibility" mode nga adunay flex gipauswag - pipila ka mga sayup sa pag-parse naayo na ug
    sayop nga operator precedence sa talagsaon nga mga kaso.
    Sa kasaysayan, ang -F --flex-support nga opsyon nagtugot kanimo sa pagsulat sa code
    gisagol sa flex style ug re2c style, nga nakapalisod sa pag-parse.
    Ang Flex compatibility mode panagsa ra gamiton sa bag-ong code,
    apan ang re2c nagpadayon sa pagsuporta niini alang sa paatras nga pagkaangay.

  • Ang operator sa subtraction sa klase sa karakter / karon magamit
    sa wala pa palapdan ang pag-encode, nga nagtugot niini nga magamit sa daghang mga kaso,
    kung gigamit ang usa ka variable nga gitas-on sa karakter nga pag-encode (pananglitan UTF8).

  • Ang output file karon gibuhat sa atomically: re2c nagmugna sa usa ka temporaryo nga file una
    ug isulat ang resulta niini, ug dayon ilisan ang ngalan sa temporaryo nga file ngadto sa output
    usa ka operasyon.

  • Ang dokumentasyon nahuman ug gisulat pag-usab; ilabina, ang mga bag-o gidugang
    mga kapitulo mahitungod sa pagpuno sa buffer
    ΠΈ mahitungod sa mga paagi sa pagsusi sa katapusan sa input data.
    Ang bag-ong dokumentasyon gikolekta sa porma
    usa ka komprehensibo nga usa ka panid nga manwal
    nga adunay mga pananglitan (ang parehas nga mga gigikanan gihubad sa manpage ug sa online nga dokumentasyon).
    Ang dili maayo nga mga pagsulay gihimo aron mapauswag ang pagkabasa sa site sa mga telepono.

  • Gikan sa punto sa panglantaw sa mga developers, ang re2c nakakuha og mas kompleto nga subsystem
    pag-debug Ang pag-debug nga code gi-disable na karon sa release builds ug
    mahimong ma-enable gamit ang configure option --enable-debug.

Kini nga pagpagawas nagdugay - hapit usa ka tuig.
Kadaghanan sa panahon, sama sa kanunay, gigugol sa pagpalambo sa usa ka teoretikal nga balangkas ug pagsulat
mga artikulo "Episyente nga POSIX Submatch Extraction sa NFA".
Ang mga algorithm nga gihulagway sa artikulo kay gipatuman sa experimental library libre2c
(Ang pagtukod sa librarya ug mga benchmark gi-disable pinaagi sa default ug gipagana sa kapilian sa pag-configure
--enable-libs). Ang librarya wala gihunahuna nga usa ka kakompetensya sa naa na
mga proyekto sama sa RE2, apan isip usa ka plataporma sa panukiduki alang sa pagpalambo sa bag-o
algorithms (nga mahimong magamit sa re2c o sa ubang mga proyekto).
Kombenyente usab kini gikan sa punto sa pagtan-aw sa pagsulay, mga benchmark ug paghimo og mga pagbugkos sa ubang mga pinulongan.

Salamat gikan sa mga developer sa re2c sa tanan nga mitabang nga mahitabo kini nga pagpagawas,
ug sa komunidad sa kinatibuk-an alang sa mga ideya, mga taho sa bug, mga patch, moral, ug uban pa. ;]

Source: linux.org.ru

Idugang sa usa ka comment