Ուրբաթ օրը՝ օգոստոսի 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-ը սկզբում ստեղծում է ժամանակավոր ֆայլ
և արդյունքը գրում է դրա մեջ, այնուհետև վերանվանում է ժամանակավոր ֆայլը ելքի
մեկ վիրահատություն.
Մշակողների տեսանկյունից re2c-ն ավելի ամբողջական ենթահամակարգ է ձեռք բերել
վրիպազերծում Վրիպազերծման կոդը այժմ անջատված է թողարկումների և
կարելի է միացնել՝ օգտագործելով configure -enable-debug տարբերակը:
Այս թողարկումը երկար ժամանակ տևեց՝ գրեթե մի ամբողջ տարի։
Ժամանակի մեծ մասը, ինչպես միշտ, ծախսվել է տեսական շրջանակի մշակման և գրելու վրա
Հոդված «POSIX ենթահամապատասխանության արդյունավետ արդյունահանում NFA-ում».
Հոդվածում նկարագրված ալգորիթմները ներդրված են libre2c փորձարարական գրադարանում
(գրադարանի և հենանիշերի կառուցումը լռելյայն անջատված է և միացված է կազմաձևման տարբերակով
--enable-libs): Գրադարանը չի ընկալվում որպես գոյություն ունեցողի մրցակից
այնպիսի նախագծեր, ինչպիսիք են RE2-ը, բայց որպես հետազոտական հարթակ նորի մշակման համար
ալգորիթմներ (որոնք այնուհետև կարող են օգտագործվել re2c-ում կամ այլ նախագծերում):
Հարմար է նաև թեստավորման, հենանիշերի և այլ լեզուների հետ կապեր ստեղծելու տեսանկյունից։
Շնորհակալություն re2c ծրագրավորողներից բոլորին, ովքեր օգնեցին այս թողարկմանը,
և ընդհանրապես համայնքին գաղափարների, վրիպակների մասին հաշվետվությունների, կարկատների, բարոյականության և այլնի համար: ;]