Բեկուս-Նուարի ընդլայնված ձև

Վիքիպեդիայից՝ ազատ հանրագիտարանից
(Վերահղված է ԲՆԸՁից)

Ինֆորմատիկայում, Բեկուս-Նուարի ընդլայնված ձևը (ԲՆԸՁ) ծրագրավորման լեզուների քերականության նկարագրության ֆորմալ եղանակ է։

ԲՆԸՁ–ում յուրաքնչյուր հերթական սինտաքսիկական կատեգորիան հաջորդաբար ներկայացվում է նախորդների միջոցով։ Այն առաջարկվել է Նիկլաուս Վիրտի կողմից՝ հիմնվելով սինտաքսի նկարագրման Բեկուս-Նուարի ձևի վրա։

Հիմքեր[խմբագրել]

ԲՆԸՁ-ն իրենից ներկայացնում է որոշակի օրենքների համախումբ, որը որոշում է տերմինալային և ոչ տերմինալային սիմվոլների միջև փոխհարաբերակցությունը։

Տերմինալային սիմվոլները քերականության մինիմալ էլեմենտներն են, որոնք չունեն սեփական քերականական կառուցվածք։ Դրանք կամ լեզվի նախապես որոշված իդենտիֆիկատորներն են, օրինակ օպերատորների անունները, կամ շղթաները՝ թվերի կամ չակերտներում տրվող սիմվոլների հաջորդականություն։

Ոչ տերմինալային սիմվոլները քերականության այն էլեմենտներն են, որոնք ունեն սեփական անունը ու կառուցվածքը։ Ցանկացած ոչ տերմինալային սիմվոլ բաղկացած է մեկ կամ մի քանի տերմինալային կամ ոչ տերմինալային սիմվոլներից, որոնց համակցությունը որոշվում է քերականության կանոններով։

ԲՆԸՁ-ի կանոնն ունի հետևյալ ընդհանուր տեսքը`

իդենտիֆիկատոր=արտահայտություն.

որտեղ իդենտիֆիկատորը ոչ տերմինալային սիմվոլի անունն է, իսկ արտահայտությունը ԲՆԸՁ–ի օրենքներին համապատասխանող տերմինալային և ոչ տերմինալային սիմվոլների կոմբինացիա է։ Վերջում տրվող «;»-ը հատուկ սիմվոլ է՝ կանոնի ավարտը նշելու համար։
ԲԸՆՁ-ի նկարագրման մեջ չի սահմանվում օրենքների գրառումների ստույգ հերթականություն։

Այլ նշանակումներ[խմբագրել]

Նկարագրության մեջ տեղի ունեն հետևյալ հիմնական նշանակումները․

<> – օգտագործվում է լեզվի ոչ տերմինալային սիմվոլներն(լեզվի հիմնական հասկացությունները) առանձնացնելու համար։ | – Այլընտրանք, «կամ». բաժանում է օրենքների այլընտրանքային տարբերակնեը։ [․․] – ցույց է տալս ներսում գրված արտահայտության ոչ պարտադիր լինելը։ {․․} – ցույց է տալիս, որ ներսի արտահայտությունը կարող է կրկնվել (նաև 0 անգամ)։ (․․) – խմբավորում

Օրինակ[խմբագրել]

Պարզ, Պասկալ լեզվին նման լեզվի նկարագրություն, որը թույլ է տալիս միայն վերագրում անել՝

(* a simple program syntax in EBNF − Wikipedia *)
program = 'PROGRAM', white space, identifier, white space, 
           'BEGIN', white space, 
           { assignment, ";", white space }, 
           'END.' ;
identifier = alphabetic character, { alphabetic character | digit } ;
number = [ "-" ], digit, { digit } ;
string = '"' , { all characters − '"' }, '"' ;
assignment = identifier , ":=" , ( number | identifier | string ) ;
alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
                     | "H" | "I" | "J" | "K" | "L" | "M" | "N"
                     | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
                     | "V" | "W" | "X" | "Y" | "Z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
white space = ? white space characters ? ;
all characters = ? all visible characters ? ;

Այդ լեզվի համար կոռեկտ ծրագիրը կարող է ունենալ հետևյալ տեսք՝

PROGRAM DEMO1
BEGIN
  A0:=3;
  B:=45;
  H:=-100023;
  C:=A;
  D123:=B34A;
  BABOON:=GIRAFFE;
  TEXT:="Hello world!";
END.

Առավելությունները ԲՆՁ–ի համեմատ[խմբագրել]

Ցանկացած քերականություն, որը նկարագրվել է ԲՆԸՁ–ով, կարելի է ներկայացնել ԲՆՁ–ի միջոցով։ Այդ դեպքում ներկայացման տեքստը որպես կանոն ավելի երկար կլինի քանի որ այլընտրանքներն ու կրկնողությունները չեն կարող անմիջականորեն արտահայտվել ԲՆՁ–ով։

ԲՆՁ–ն օգտագործում է (<, >, |, ::=) սիմվոլները իր համար, բայց չի օգտագործում չակերտներ տերմինալ տողերի շուրջ։ Դա խանգարում է այդ նիշերի օգտագործմանը նկարագրված լեզուներում, և պահանջում է հատուկ սիմվոլ դատարկ տողի համար։ ԲՆԸՁ–ում, տերմինալները ստույգ նշված են չակերտներով՝ ("..." կամ '...')։ Սուր փակագծերը ("<...>") ոչ տերմինալների համար կարող են բաց թողնվել։

ԲՆՁ սինտաքով հնարավոր է ներկայացնել մեկ տողում միայն մեկ կանոն, իսկ ԲՆԸՁ կանոնի ավարտը նշանակվում է կետ–ստորակետի օգնությամբ։ ԲՆԸՁ–ն նաև ներառում է ընդլայնման մեխանիզմներ, կրկնողությունների քանակի սահմանափակում, բացառություններ։