Ngaleupaskeun generator analisa leksikal re2c 2.0

lumangsung ngabebaskeun re2c 2.0, generator analisa leksikal gratis pikeun basa C sareng C++. Proyék re2c mimitina didamel taun 1993 ku Peter Bamboulis salaku generator ékspérimén tina analisa léksikal anu gancang pisan, dibédakeun tina generator sanés ku kecepatan kode anu dibangkitkeun sareng antarbeungeut pangguna anu luar biasa anu fleksibel anu ngamungkinkeun analisa gampang sareng éfisién dipasang 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.

Parobahan utama:

  • Ditambahkeun dukungan pikeun basa Go (diaktipkeun ku pilihan "--lang go" pikeun re2c, atanapi salaku program re2go anu misah). Dokuméntasi pikeun C sareng Go dihasilkeun tina téks anu sami, tapi kalayan conto kode anu béda. Subsistem generasi kode dina re2c parantos dirarancang deui, anu matak ngagampangkeun pikeun ngadukung basa énggal di hareup.
  • Ditambahkeun sistem ngawangun alternatif pikeun CMake (hatur nuhun ligfx!). Usaha narjamahkeun re2c ka CMake parantos lami dilakukeun, tapi dugi ka ligfx teu aya anu ngajukeun solusi anu lengkep. Sistem ngawangun Autotools heubeul terus dirojong sarta dipaké, sarta teu aya rencana pikeun abandon eta dina mangsa nu bakal datang foreseeable (sabagean ulah nyieun masalah pikeun pamekar distribution, sabagean kusabab sistem wangunan heubeul leuwih stabil sarta leuwih singket ti nu anyar. ). Kadua sistem terus diuji nganggo Travis CI.
  • Ditambahkeun kamampuhan pikeun nangtukeun kode panganteur dina konfigurasi nalika maké API generik. Saméméhna, sabagéan ageung API kedah dieusian dina bentuk fungsi atanapi makro fungsi. Ayeuna aranjeunna tiasa ditetepkeun dina bentuk senar sawenang-wenang kalayan nami parameter citakan tina bentuk "@@{nami}" atanapi ngan saukur "@@" (upami ngan ukur aya hiji parameter sareng teu aya ambiguitas). Gaya API diatur ku konfigurasi gaya re2c:api: (nilai fungsi nangtukeun gaya fungsional, sareng bentuk bébas nangtukeun gaya anu sawenang-wenang).
  • Operasi pilihan "-c", "-start-conditions" geus ningkat, ngamungkinkeun anjeun pikeun ngagabungkeun sababaraha lexers interconnected dina hiji blok re2c. Ayeuna anjeun tiasa nganggo blok biasa sareng blok kondisional sareng nangtukeun sababaraha blok kondisional anu teu aya hubunganana dina hiji file. Ningkatkeun operasi pilihan "-r", "--reuse" (ngagunakeun deui kode tina hiji blok dina blok sanés) dina kombinasi sareng "-c", "--start-conditions" sareng "-f", "-- storable-state" pilihan (a lexer stateful nu bisa interrupted iraha wae titik sarta nuluykeun palaksanaan engké).
  • Ngalereskeun bug dina algoritma end-of-input (aturan EOF) anu nembe ditambahkeun, anu dina kasus anu jarang nyababkeun pamrosésan aturan tumpang tindih anu salah.
  • Prosés bootstrap parantos disederhanakeun. Saméméhna, sistem ngawangun nyoba dinamis manggihan hiji re2c geus diwangun nu bisa dipaké pikeun ngawangun deui sorangan. Ieu nyababkeun katergantungan anu salah (sabab grafik kagumantungan dinamis, anu teu resep ku kalolobaan sistem ngawangun). Ayeuna, pikeun ngawangun deui lexers, anjeun kedah sacara eksplisit ngonpigurasikeun sistem ngawangun sareng nyetél variabel RE2C_FOR_BUILD.

sumber: opennet.ru

Tambahkeun komentar