re2c 2.0 лексик анализатор үүсгэгчийг гаргалаа

болсон суллах re2c 2.0, C ба C++ хэлний үнэгүй лексик анализатор үүсгэгч. re2c төслийг 1993 онд Питер Бамбулис маш хурдан лексик анализаторын туршилтын үүсгүүр болгон бүтээсэн бөгөөд үүсгэсэн кодын хурдаараа бусад генераторуудаас ялгагдах бөгөөд энэ нь анализаторуудыг одоо байгаа системд хялбар, үр дүнтэй суулгах боломжийг олгодог ер бусын уян хатан хэрэглэгчийн интерфейс юм. кодын суурь. Түүнээс хойш уг төслийг олон нийт боловсруулж, албан ёсны дүрэм, хязгаарлагдмал төрийн машинуудын чиглэлээр туршилт, судалгааны платформ байсаар байна.

Үндсэн өөрчлөлтүүд:

  • Go хэлний дэмжлэгийг нэмсэн (re2c-д зориулсан "--lang go" сонголтоор эсвэл тусдаа re2go програмаар идэвхжүүлсэн). C болон Go-д зориулсан баримт бичгийг ижил текстээс үүсгэсэн боловч өөр өөр кодын жишээтэй. Re2c дахь код үүсгэх дэд системийг бүрэн шинэчилсэн бөгөөд энэ нь ирээдүйд шинэ хэлийг дэмжихэд хялбар болгоно.
  • CMake-д зориулсан өөр бүтээх системийг нэмсэн (баярлалаа ligfx!). Re2c-г CMake руу орчуулах оролдлого удаан хугацаанд хийгдсэн боловч ligfx хүртэл хэн ч бүрэн хэмжээний шийдлийг санал болгосонгүй. Хуучин Autotools бүтээх системийг дэмжин ашигласаар байгаа бөгөөд ойрын ирээдүйд үүнийг орхих төлөвлөгөө байхгүй байна (хэсэгчлэн түгээлтийн хөгжүүлэгчдэд асуудал үүсгэхгүйн тулд, зарим нь хуучин бүтээх систем нь шинийг бодвол илүү тогтвортой, илүү товч учраас). ). Хоёр системийг Travis CI ашиглан тасралтгүй туршдаг.
  • Ерөнхий API ашиглах үед тохиргоонд интерфэйсийн кодыг зааж өгөх боломжийг нэмсэн. Өмнө нь ихэнх API-уудыг функц эсвэл функцийн макро хэлбэрээр зааж өгөх шаардлагатай байсан. Одоо тэдгээрийг "@@{name}" хэлбэрийн нэрлэсэн загвар параметрүүдтэй дурын мөр хэлбэрээр эсвэл зүгээр л "@@" (хэрэв зөвхөн нэг параметр байгаа бөгөөд тодорхой бус зүйл байхгүй бол) зааж өгч болно. API загварыг re2c:api:style тохиргоогоор тохируулдаг (функцийн утга нь функциональ хэв маягийг, чөлөөт хэлбэр нь дурын хэв маягийг зааж өгдөг).
  • "-c", "-start-conditions" сонголтуудын ажиллагааг сайжруулснаар хоорондоо холбогдсон хэд хэдэн лексерийг нэг re2c блокт нэгтгэх боломжийг олгосон. Одоо та ердийн блокуудыг нөхцөлт блокуудын хамт ашиглаж, нэг файлд хэд хэдэн хамааралгүй нөхцөлт блокуудыг тодорхойлж болно. "-r", "--reuse" (бусад блок дахь нэг блокийн кодыг дахин ашиглах) "-c", "--start-conditions" болон "-f", "--"-тэй хослуулан сайжруулсан ажиллагаа. "storable-state" сонголтууд (ямар ч үед тасалдаж, дараа нь үргэлжлүүлэн гүйцэтгэх боломжтой төлөвтэй лексер).
  • Саяхан нэмэгдсэн оролтын төгсгөлийн (EOF дүрэм) алгоритмын алдааг зассан бөгөөд энэ нь ховор тохиолдолд давхцаж буй дүрмүүдийг буруу боловсруулахад хүргэдэг.
  • Ачаалах процессыг хялбаршуулсан. Өмнө нь угсралтын систем нь өөрийгөө дахин бүтээхэд ашиглаж болох аль хэдийн баригдсан re2c-ийг динамикаар олохыг оролдсон. Энэ нь буруу хамаарал үүсэхэд хүргэсэн (учир нь хамаарлын график динамик байсан бөгөөд ихэнх бүтээх системд дургүй байдаг). Одоо, lexers-ийг дахин бүтээхийн тулд та бүтээх системийг тодорхой тохируулж, RE2C_FOR_BUILD хувьсагчийг тохируулах хэрэгтэй.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх