Re2c lexer generator 1.2-ի թողարկում

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

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

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

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

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

  • Ավելացվեց վերնագրի ֆայլեր կամայականությամբ գեներացնելու հնարավորություն
    բովանդակություն՝ օգտագործելով «-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 {ascii |.» տարբերակը utf8}»,
    որը թույլ է տալիս փոխել վարքագիծը և վերլուծել «∀x ∃y»-ը որպես
    «2200 78 20 2203 79»:

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

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

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

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

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

  • Փաստաթղթերը լրացվել և վերաշարադրվել են. մասնավորապես ավելացվել են նորերը
    մասին գլուխներ http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и մուտքային տվյալների ավարտը ստուգելու եղանակների մասին.
    Նոր փաստաթղթերը հավաքվում են ձևով
    համապարփակ մեկ էջանոց ուղեցույց
    օրինակներով (նույն աղբյուրները ներկայացված են manpage-ում և առցանց փաստաթղթերում):
    Վատ փորձեր են արվել բարելավել կայքի ընթեռնելիությունը հեռախոսներում:

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

Source: opennet.ru

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