Ուրբաթ օրը՝ օգոստոսի 2-ին, թողարկվեց re2c-ը՝ C և C++ լեզուների համար լեքսիկական անալիզատորների անվճար գեներատորի թողարկումը: Re2c-ը գրվել է 1993 թվականին Պիտեր Բամբուլիսի կողմից՝ որպես շատ արագ լեքսիկական անալիզատորների փորձարարական գեներատոր, որը տարբերվում է այլ գեներատորներից գեներացված կոդի արագությամբ և անսովոր ճկուն ինտերֆեյսով, որը թույլ է տալիս անալիզատորներին հեշտությամբ և արդյունավետ կերպով ներդնել գոյություն ունեցող կոդերի բազայում: Այդ ժամանակից ի վեր նախագիծը մշակվել է համայնքի կողմից և շարունակում է լինել փորձերի և հետազոտությունների հարթակ ֆորմալ քերականության և վերջավոր վիճակի մեքենաների ոլորտում:

1.2 տարբերակի հիմնական նորամուծությունները.

  • Ավելացվեց մուտքագրված տվյալների ավարտը ստուգելու նոր (պարզեցված) եղանակ
    (Անգլերեն «EOF կանոն»):
    Դրա համար ավելացվել է re2c:eof կոնֆիգուրացիան,
    թույլ է տալիս ընտրել տերմինալային նիշը,
    և հատուկ $ կանոն, որը կրակում է, եթե lexer-ը
    հաջողությամբ հասել է մուտքագրման տվյալների ավարտին:
    Պատմականորեն, re2c-ն ապահովում է ստուգման մի քանի մեթոդների ընտրություն
    մուտքերի վերջը տարբերվում է սահմանափակությամբ, արդյունավետությամբ և պարզությամբ
    հավելվածներ։ Նոր մեթոդը նախատեսված է կոդ գրելը պարզեցնելու համար, մինչդեռ
    միաժամանակ մնալով արդյունավետ և լայնորեն կիրառելի: Հին ուղիներ
    դեռ աշխատում է և որոշ դեպքերում կարող է նախընտրելի լինել:

  • Ավելացրել է դիրեկտիվի միջոցով արտաքին ֆայլեր ներառելու հնարավորությունը
    /*!include:re2c «file.re» */ որտեղ file.re
    սա ներառող ֆայլի անունն է: Re2c-ը փնտրում է ֆայլեր ներառյալ ֆայլերի գրացուցակում,
    ինչպես նաև -I տարբերակի միջոցով նշված ուղիների ցանկում:
    Ներառված ֆայլերը կարող են ներառել այլ ֆայլեր:
    Re2c-ն ապահովում է «ստանդարտ» ֆայլեր ներառ/գրացուցակում
    նախագիծ - ակնկալվում է, որ այնտեղ կկուտակվեն օգտակար սահմանումներ
    կանոնավոր արտահայտություններ, ստանդարտ գրադարանի նման մի բան:
    Մինչ այժմ աշխատողների խնդրանքով ավելացվել է մեկ ֆայլ՝ Յունիկոդ կատեգորիաների սահմանումներով։

  • Ավելացվեց վերնագրի ֆայլեր կամայականությամբ գեներացնելու հնարավորություն
    բովանդակություն՝ օգտագործելով -t --type-header տարբերակները (կամ համապատասխան
    կոնֆիգուրացիաներ) և նոր դիրեկտիվներ /*!header:re2c:on*/ և
    /*!header:re2c:off*/. Սա կարող է օգտակար լինել այն դեպքերում, երբ
    երբ re2c-ը պետք է գեներացնի փոփոխականների, կառուցվածքների և մակրոների սահմանումներ,
    օգտագործվում է թարգմանչական այլ միավորներում։

  • Re2c-ն այժմ հասկանում է UTF8 բառացիները և նիշերի դասերը կանոնավոր արտահայտություններով:
    Լռելյայնորեն, re2c-ը վերլուծում է «∀x ∃y» արտահայտությունները որպես:
    1-բիթանոց ASCII նիշերի հաջորդականություն e2 88 80 78 20 e2 88 83 79
    (վեցանկյուն կոդեր), և օգտվողները պետք է ձեռքով փախչեն Յունիկոդի նիշերից.
    «u2200x u2203y»: Սա շատ անհարմար և անսպասելի է շատերի համար
    օգտատերեր (ինչպես վկայում են սխալների մշտական ​​հաշվետվությունները): Այսպիսով հիմա
    re2c-ն ապահովում է --input-encoding տարբերակ ,
    որը թույլ է տալիս փոխել վարքագիծը և վերլուծել «∀x ∃y»-ը որպես
    2200 78 20 2203 79:

  • Re2c-ն այժմ թույլ է տալիս սովորական re2c բլոկների օգտագործումը -r --reuse ռեժիմում:
    Սա հարմար է, եթե մուտքային ֆայլը պարունակում է բազմաթիվ բլոկներ և միայն դրանցից մի քանիսը
    անհրաժեշտ է նորից օգտագործել:

  • Այժմ կարող եք նախազգուշացումների և սխալ հաղորդագրությունների ձևաչափը սահմանել
    օգտագործելով նոր --location-format տարբերակը . Ցուցադրվում է GNU ձևաչափը
    որպես ֆայլի անուն: տող: սյունակ:, իսկ MSVC ձևաչափը որպես ֆայլի անուն (տող, սյունակ):
    Այս հատկությունը կարող է օգտակար լինել IDE-ի սիրահարների համար:
    Ավելացվել է նաև --verbose տարբերակ, որը հաջողության դեպքում տպում է կարճ հաղթանակի հաղորդագրություն:

  • Բարելավվել է flex-ի հետ «համատեղելիության» ռեժիմը. վերլուծության որոշ սխալներ շտկվել են և
    Օպերատորի սխալ գերակայությունը հազվադեպ դեպքերում:
    Պատմականորեն, -F --flex-support տարբերակը թույլ էր տալիս գրել կոդը
    խառնված է flex ոճով և re2c ոճով, ինչը մի փոքր դժվարացնում է վերլուծությունը:
    Flex համատեղելիության ռեժիմը հազվադեպ է օգտագործվում նոր կոդում,
    բայց re2c-ը շարունակում է աջակցել այն հետընթաց համատեղելիության համար:

  • Նիշերի դասի հանման օպերատորը / այժմ կիրառվում է
    նախքան կոդավորումը ընդլայնելը, ինչը թույլ է տալիս այն օգտագործել ավելի մեծ թվով դեպքերում,
    եթե օգտագործվում է փոփոխական նիշերի երկարության կոդավորում (օրինակ՝ UTF8):

  • Ելքային ֆայլն այժմ ստեղծվում է ատոմային եղանակով. re2c-ը սկզբում ստեղծում է ժամանակավոր ֆայլ
    և արդյունքը գրում է դրա մեջ, այնուհետև վերանվանում է ժամանակավոր ֆայլը ելքի
    մեկ վիրահատություն.

  • Փաստաթղթերը լրացվել և վերաշարադրվել են. մասնավորապես ավելացվել են նորերը
    գլուխները բուֆեր լցնելու մասին
    и մուտքային տվյալների ավարտը ստուգելու եղանակների մասին.
    Նոր փաստաթղթերը հավաքվում են ձևով
    համապարփակ մեկ էջանոց ձեռնարկ
    օրինակներով (նույն աղբյուրները ներկայացված են manpage-ում և առցանց փաստաթղթերում):
    Վատ փորձեր են արվել բարելավել կայքի ընթեռնելիությունը հեռախոսներում:

  • Մշակողների տեսանկյունից re2c-ն ավելի ամբողջական ենթահամակարգ է ձեռք բերել
    վրիպազերծում Վրիպազերծման կոդը այժմ անջատված է թողարկումների և
    կարելի է միացնել՝ օգտագործելով configure -enable-debug տարբերակը:

Այս թողարկումը երկար ժամանակ տևեց՝ գրեթե մի ամբողջ տարի։
Ժամանակի մեծ մասը, ինչպես միշտ, ծախսվել է տեսական շրջանակի մշակման և գրելու վրա
Հոդված «POSIX ենթահամապատասխանության արդյունավետ արդյունահանում NFA-ում».
Հոդվածում նկարագրված ալգորիթմները ներդրված են libre2c փորձարարական գրադարանում
(գրադարանի և հենանիշերի կառուցումը լռելյայն անջատված է և միացված է կազմաձևման տարբերակով
--enable-libs): Գրադարանը չի ընկալվում որպես գոյություն ունեցողի մրցակից
այնպիսի նախագծեր, ինչպիսիք են RE2-ը, բայց որպես հետազոտական ​​հարթակ նորի մշակման համար
ալգորիթմներ (որոնք այնուհետև կարող են օգտագործվել re2c-ում կամ այլ նախագծերում):
Հարմար է նաև թեստավորման, հենանիշերի և այլ լեզուների հետ կապեր ստեղծելու տեսանկյունից։

Շնորհակալություն re2c ծրագրավորողներից բոլորին, ովքեր օգնեցին այս թողարկմանը,
և ընդհանրապես համայնքին գաղափարների, վրիպակների մասին հաշվետվությունների, կարկատների, բարոյականության և այլնի համար: ;]

Source: linux.org.ru

Добавить комментарий