Ngaleupaskeun generator analisa leksikal re2c 1.2

lumangsung ngabebaskeun deui2c, generator analisa leksikal gratis pikeun basa C sareng C++. Hayu urang émut yén re2c ditulis dina 1993 ku Peter Bambulis salaku generator ékspérimén tina analisa léksikal anu gancang pisan, bénten ti generator sanés dina laju kode anu dibangkitkeun sareng antarbeungeut pangguna anu luar biasa fléksibel anu ngamungkinkeun analisa gampang sareng éfisién diintegrasikeun kana anu aya. dasar kode. Ti saprak éta, proyék éta parantos dikembangkeun ku masarakat sareng teras janten platform pikeun ékspérimén sareng panalungtikan dina widang tata basa formal sareng mesin kaayaan terbatas.

Persiapan pikeun sékrési nyandak ampir sataun. Kalolobaan waktu, sakumaha salawasna, ieu spent dina ngamekarkeun kerangka teoritis jeung tulisan
artikel"Éfisién ékstraksi POSIX Submatch on NFA".
Algoritma anu dijelaskeun dina tulisan dilaksanakeun di perpustakaan eksperimen libre2c
(ngawangun perpustakaan sareng tés kinerja ditumpurkeun sacara standar sareng diaktipkeun ku pilihan konfigurasi "--enable-libs". Perpustakaan henteu dimaksudkeun salaku saingan pikeun proyék-proyék anu aya sapertos RE2, tapi salaku platform panalungtikan pikeun pamekaran anu énggal.
algoritma (anu lajeng bisa dipaké dina re2c atanapi dina proyék séjén). Éta ogé merenah tina sudut pandang nguji, ngukur kinerja sarta nyieun bindings kana basa séjén.

Inovasi utama dina versi re2c 1.2:

  • Ditambahkeun metode saderhana anyar pikeun mariksa tungtung data input ("aturan EOF"). Pikeun ieu, konfigurasi "re2c: eof" parantos ditambahkeun,
    ngidinan Anjeun pikeun milih karakter terminal,
    jeung aturan husus "$", nu dipicu lamun lexer
    hasil ngahontal tungtung data input.
    Dina sajarahna, re2c nyadiakeun pilihan sababaraha métode verifikasi pikeun
    tungtung inputs varying dina watesan, efisiensi tur kesederhanaan
    aplikasi. Metodeu anyar dirancang pikeun simplify kode nulis, bari
    bari tetep éféktif jeung loba lumaku. Cara baheula
    masih dianggo tur bisa jadi pikaresep dina sababaraha kasus.

  • Ditambahkeun kamampuan pikeun ngalebetkeun file éksternal nganggo diréktif
    "/*!include:re2c "file.re" */", dimana "file.re" nyaéta ngaran file anu bakal diasupkeun. Re2c milarian file dina diréktori file kalebet,
    kitu ogé dina daptar jalur dieusian ngagunakeun pilihan "-I".
    File anu kalebet tiasa kalebet file anu sanés.
    Re2c nyadiakeun file "standar" dina diréktori "kaasup /".
    proyék - diperkirakeun yén definisi mangpaat bakal ngumpulkeun di dinya
    ungkapan biasa, hal kawas perpustakaan baku.
    Sajauh ieu, dina pamundut pagawe, hiji file jeung definisi kategori Unicode geus ditambahkeun.

  • Ditambahkeun kamampuan pikeun ngahasilkeun file header kalayan sawenang-wenang
    eusi ngagunakeun pilihan "-t --type-header" (atawa luyu
    konfigurasi) jeung diréktif anyar "/*! header:re2c:on*/"Jeung
    "/*!header:re2c:off*/". Ieu bisa jadi mangpaat dina kasus dimana
    nalika re2c kedah ngahasilkeun definisi variabel, struktur sareng makro,
    dipaké dina unit tarjamah séjén.

  • Re2c ayeuna ngartos UTF8 literals sareng kelas karakter dina ekspresi biasa.
    Sacara standar, re2c parses éksprési kawas "∀x ∃y" salaku
    runtuyan 1-bit karakter ASCII "e2 88 80 78 20 e2 88 83 79"
    (kode hex), sarta pamaké kudu kabur karakter Unicode sacara manual:
    "\\u2200x \\u2203y." Ieu pisan teu nyaman jeung teu kaduga keur loba
    pamaké (sakumaha dibuktikeun ku laporan bug konstan). Tah ayeuna
    re2c nyadiakeun pilihan "--input-encoding {ascii | utf8}",
    nu ngidinan Anjeun pikeun ngarobah kabiasaan jeung parse "∀x ∃y" salaku
    "2200 78 20 2203 79."

  • Re2c ayeuna ngamungkinkeun blok re2c biasa dianggo dina modeu "-r --reuse".
    Ieu merenah lamun file input ngandung loba blok jeung ngan sababaraha di antarana
    perlu dipaké deui.

  • Ayeuna anjeun tiasa nyetél format peringatan sareng pesen kasalahan
    ngagunakeun pilihan anyar "--location-format {gnu | msvc}". Format GNU dipintonkeun
    salaku "ngaran koropak: garis: kolom:", jeung format MSVC salaku "ngaran koropak (garis, kolom)".
    fitur ieu bisa jadi mangpaat pikeun pencinta IDE.
    A "--verbose" pilihan ogé geus ditambahkeun, nu mintonkeun pesen meunangna pondok lamun sukses.

  • Mode "kasaluyuan" sareng flex parantos ningkat - sababaraha kasalahan parsing parantos dibenerkeun sareng
    precedence operator salah dina kasus nu jarang dipake.
    Dina sajarahna, pilihan "-F --flex-suppor" ngamungkinkeun anjeun nyerat kode
    dicampur dina gaya flex jeung gaya re2c, nu ngajadikeun parsing saeutik hésé.
    Modeu kasaluyuan fleksibel jarang dianggo dina kode anyar,
    tapi re2c terus ngarojong eta pikeun kasaluyuan mundur.

  • Operator pangurangan kelas karakter "/" ayeuna berlaku
    sateuacan ngalegaan encoding, anu ngamungkinkeun éta dianggo dina sajumlah kasus anu langkung ageung,
    lamun encoding panjang karakter variabel dipaké (contona UTF8).

  • Berkas kaluaran ayeuna didamel sacara atom: re2c nyiptakeun file samentawis heula
    sareng nyerat hasilna kana éta, teras ganti nami file samentawis kana kaluaran
    hiji operasi.

  • Dokuméntasi réngsé sareng ditulis deui; hususna, nu anyar ditambahkeun
    bab ngeunaan http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и ngeunaan cara mariksa tungtung data input.
    Dokuméntasi anyar dikumpulkeun dina bentuk
    pituduh hiji halaman komprehensif
    kalayan conto (sumber anu sami disayogikeun dina halaman manual sareng dina dokuméntasi online).
    Usaha anu goréng parantos dilakukeun pikeun ningkatkeun kabacaan situs dina telepon.

  • Tina sudut pandang pamekar, re2c parantos kéngingkeun subsistem anu langkung lengkep
    debugging Kode debugging ayeuna ditumpurkeun dina release ngawangun sarta
    tiasa diaktipkeun nganggo pilihan konfigurasi "--enable-debug".

sumber: opennet.ru

Tambahkeun komentar