EnglishРусский  

   Приложение

  • Язык Gentee в БНФ

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

Язык Gentee в БНФ

В тексте программы могут использоваться ANSI символы с кодом от 0 до 255. В диаграммах в кавычках указаны ANSI символы с кодом от 32 до 128, остальные символы записаны в виде шестнадцатеричного кода, например 0x09 - символ табуляции. В диаграммах не отображены некоторые препроцессорные команды.

<двоичная цифра> ::= '0' | '1'

<десятичная цифра> ::= <двоичная цифра> | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

<шестнадцатеричная цифра> ::= <десятичная цифра> | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'

<байт> ::= <шестнадцатеричная цифра><шестнадцатеричная цифра>

<десятичное число> ::= <десятичная цифра> {<десятичная цифра>}

<шестнадцатеричное число> ::= '0' ('x' | 'X') <шестнадцатеричное число> {<шестнадцатеричное число>}

<двоичное число> ::= '0' ('b' | 'B') <двоичное число> {<двоичное число>}

<код символа> ::= '''<любой символ>'''

<число с точкой> ::= <десятичное число>'.'[<десятичное число>]

<действительное число> ::= ['-'] (<число с точкой> | <число с точкой> ('e' | 'E') ['+' | '-'] <десятичное число>) ['d' | 'D']

<натуральное число> ::= <десятичное число> | <шестнадцатеричное число> | <двоичное число> | <код символа>

<целое число> ::= ['-'] <натуральное число> ['l' | 'L']

<число> := <целое число> | <число с точкой> | <действительное число>

<буква> ::= 'A' | 'B' | ... | 'Z' | 'a' | 'b' | ... | 'z' | 0x80 | 0x81 | ... | 0xFF

<пробел> ::= 0x20

<табуляция> ::= 0x09

<конец строки> := 0x0D 0x0A

<спецсимвол> ::= '!' | '"' | '#' | '$' | '%' | '&' | ''' | '(' | ')' | '*' | '+' | ',' | '-' | '.' | '/' | '<' | '=' | '>' | '?' | '@' | '[' | '\' | ']' | '^' | '_' | '|' | '}' | '{' | '~' | <табуляция> | <пробел> | <конец строки>

<символ> ::= <десятичная цифра> | <буква> | <спецсимвол>

<имя> ::= (<буква> | '_') {<буква> | '_' | <десятичная цифра>}

<имя функции> ::= <имя>

<имя переменной> ::= <имя>

<имя типа> ::= <имя>

<имя поля> ::= <имя>

<имя метода> ::= <имя>

<имя атрибута> ::= <имя>

<имя макроса> ::= <имя>

<стр символ> ::= <табуляция> | <пробел> | '!' | '#' | ... | '[' | ']' | ... | 0xFF

<расш стр символ> ::= <стр символ> | '\'

<любой символ> ::= <расш стр символ> | '"'

<элемент макростроки> ::= {<стр символ>|<конец строки>| '$'<имя макроса>}

<элемент конст строки> ::= <стр символ> | <конец строки> | '\\' | '\"' | '\a' | '\b' | '\f' | '\n' | '\r' | '\t' | '\l' | '\0'<байт> | '\$'<имя макроса>'$' | '\$"' {<элемент макростроки>} '"' | '\#' | '\=' ( '\' | '/' | '~' | '^' | '&' | ':') | '\%['[ {<расш стр символ>} ]']'{<расш стр символ>}[{<расш стр символ>}] | '\[' {<любой символ>}']' | '\<'{<элемент макростроки>}'>'

<элемент строки> ::= {<расш стр символ>} | '\('<выражение>')'

<конст строка> ::= '"' { <элемент конст строки> | '\!'{<элемент конст строки>| '"'}'\!' }'"'

<строка> ::= '"' { <элемент строки>| '\!'{<элемент строки>| '"'}'\!' }'"'

<элемент конст двоичных данных> ::= '\h'<пробел> [ ( '2' | '4' | '8' ) <пробел>] | '\i'<пробел> [ ( '2' | '4' | '8' ) <пробел>] | <шестнадцатеричная цифра> {<шестнадцатеричная цифра>} { (<пробел> | ',' | <конец строки>) <шестнадцатеричная цифра> {<шестнадцатеричная цифра>} } | <целое число> { (<пробел> | ',' | <конец строки>) <целое число> } | '\'<конст строка> | '\[' {<любой символ>}']' | '\$'<имя макроса>'$' | '\$"' {<элемент макростроки>} '"' | '\<'{<элемент макростроки>}'>'

<элемент двоичных данных> ::= <элемент конст двоичных данных> | '\('<выражение>')'

<конст двоичные данные> ::= ''' {<элемент конст двоичных данных>} '''

<двоичные данные> ::= ''' {<элемент двоичных данных>} '''

<конст коллекция> ::= '%{' <константа> {','<константа>} '}'

<коллекция> ::= '%{' <выражение> {','<выражение>} '}'

<константа> ::= <число> | <конст строка> | <конст двоичные данные> | <конст коллекция>

<описание массива> ::= [ '[' {','} ']' ] [of <имя типа>]

<объект> ::= <имя переменной> | <указатель> | <элемент массива> | <поле> | <вызов функции> | <вызов метода> | <выражение> | <позднее связывание>

<указатель> ::= <выражение> '->' <имя типа> [<описание массива>]

<параметры> ::= <выражение> {','<выражение>}

<элемент массива> ::= <объект>'['<параметры>']'

<поле> ::= [<объект>]'.'<имя поля>

<позднее связывание> ::=<объект>'~' (<имя поля> | <имя метода>'(' [<параметры>] ')')

<вызов функции> ::= (<имя функции> | <выражение>'->'func ) '(' [<параметры>] ')'

<вызов метода> ::= [<объект>]'.'<имя метода>'(' [<параметры>] ')'

<lvalue> ::= <объект> | <имя переменной> | <указатель> | <элемент массива> | <поле>

<операция as> ::= <имя переменной>'as' ((<имя типа>[<описание массива>]) | <объект>)

<операнд> ::= <lvalue> | <константа> | <строка> | <двоичные данные> | <коллекция> | <вызов функции> | <вызов метода> | <имя типа> | <позднее связывание>

<оператор инкремента> ::= '++' | '--'

<оператор присваивания> ::= '=' | '%=' | '&=' | '*=' | '+=' | '-=' | '/=' | '<<=' | '>>=' | '^=' | '|='

<оператор унарный> ::= '+' | '-' | '*' | '!' | '~' | '@'

<оператор бинарный> ::= '==' | '!=' | '>' | '<' | '<=' | '>=' | '&&' | '||' | '&' | '%' | '*' | '/' | '+' | '-' | '<<' | '>>' | '^' | '%==' | '%!=' | '%>' | '%<' | '%<=' | '%>=' | '@'

<оператор> ::= <оператор инкремента> | <оператор присваивания> | <оператор унарный> | <оператор бинарный>

<выр присв> ::= <lvalue><оператор присваивания><выражение>

<выр с lvalue> ::= '&'<lvalue> | '&'<имя функции> | <оператор инкремента><lvalue> | <lvalue><оператор инкремента>

<выражение-вопрос> ::= '?''(' <выражение>',' [<выражение>] ',' [<выражение>] ')'

<выражение> ::= <операнд> | <выр присв> | <выр с lvalue> | <выражение><оператор бинарный> [<конец строки>] <выражение> | '('<выражение>')' | <оператор унарный><выражение> | <операция as> | <выражение-вопрос>

<описание переменной> ::= <имя переменной> ['['<выражение> { [','] <выражение>} ']'] [of <имя типа>]

<перечисление переменных> ::= <описание переменной> ['='<выражение>','<перечисление переменных>] | <описание переменной> [[',']<перечисление переменных>]

<определение переменных> ::= <имя типа><перечисление переменных><конец строки>

<if> ::= if <выражение><блок> {elif <выражение> <блок>} [else <блок>]

<while> ::= while <выражение><блок>

<dowhile> ::= do <блок> while <выражение>

<for> ::= for [<выражение>] ','<выражение>',' [<выражение>] <блок>

<fornum> ::= fornum <имя переменной> ['='<выражение>] ','<выражение><блок>

<foreach> ::= foreach [<имя типа>] <имя переменной> [<описание массива>]','<выражение><блок>

<return> ::= return [<выражение>]

<label> ::= label <имя>

<goto> ::= goto <имя>

<switch> ::= switch <выражение>'{' {case <выражение> {','<выражение>} {<label>} <блок>} [default {<label>} <блок>] '}'

<содержимое блока> ::= <команда блока> {<конец строки><команда блока>}

<блок> ::= '{'<содержимое блока>'}'

<команда блока> ::= {<label>} (<блок> | <выражение> | <определение переменных> | <if> | <for> | <fornum> | <while> | <dowhile> | <foreach> | <switch> | break | continue | <return>)

<описание параметра> ::= <имя переменной> [<описание массива>]

<описание параметров> ::= <имя типа><описание параметра> { [','] <описание параметра>} [<описание параметров>]

<атрибуты> ::= '<'<имя атрибута> { [','] <имя атрибута>} '>'

<подфункция> ::= subfunc [<имя типа>] <имя функции> ['(' [<описание параметров>] ')'] <блок>

<тело функции> ::= '{' (<команда блока> | <подфункция>) <команда блока> {<конец строки> (<команда блока> | <подфункция>) } '}'

<описание функции> ::= func [<имя типа>] <имя функции> [<атрибуты>] ['(' [<описание параметров>] ')']

<func> ::= <описание функции><тело функции>

<описание метода> ::= method [<имя типа>] <имя типа>'.'<имя метода>[<атрибуты>] ['(' [<описание параметров>] ')']

<method> ::= <описание метода><тело функции>

<описание свойства> ::= property [<имя типа>] <имя типа>'.'<имя метода> [<атрибуты>] ['(' [<описание параметров>] ')']

<property> ::= <описание свойства><тело функции>

<описание оператора> ::= operator <имя типа> <оператор> [<атрибуты>] '(' <описание параметров> ')'

<operator> ::= <описание оператора><тело функции>

<описание текст-функции> ::= text <имя функции> [<атрибуты>]['(' [<описание параметров>] ')']

<тело текст-функции> ::= { <элемент конст строки> | '\@'<имя функции>'(' [<параметры>]> | '\('<выражение>')' | '\{'(<команда блока> | <подфункция>) <команда блока> {<конец строки> (<команда блока> | <подфункция>) }'}' }['\!']

<text> ::= <описание текст-функции><конец строки><тело текст-функции>

<определение макроса> ::= <имя макроса> ['=' (<константа>|<имя>) ]

<define> ::= define [<имя>][<атрибуты>] '{'<определение макроса> {<конец строки><определение макроса>} '}'

<выражение с макросами> ::= '$'<имя макроса> | <константа> | '!'<выражение с макросами> | '('<выражение с макросами>')' | <выражение с макросами> ( '&&' | '||' | '==' | '!=' ) <выражение с макросами>

<ifdef> ::= ifdef <выражение с макросами> '{' ... '}' { elif <выражение с макросами> '{' ... '}' } [ else '{' ... '}']

<имя файла> ::= '"' {<стр символ>} '"'

<include> ::= include '{'<имя файла> {<конец строки><имя файла>} '}'

<описание импортируемой функции> ::= [ <имя типа> ] <имя функции> '(' [ <имя типа> { ','<имя типа> } ] ')' [ '->' <имя функции>]

<import> ::= import <имя файла> [<атрибуты>] '{' <описание импортируемой функции> { <конец строки><описание импортируемой функции> } '}'

<описание поля> ::= <описание поля> [<определение массива>]

<описание полей> ::= <имя типа><описание поля> {[','] <описание поля>}<конец строки>

<type> ::= type [<атрибуты>] '{'<описание полей>{<описание полей>} '}'

<определение массива> ::= ['['<натуральное число> { [','] <натуральное число>} ']'] [of <имя типа>]

<описание глоб переменной> ::= <имя переменной> [<определение массива>]['=' <константа> ]

<описание глоб переменных> ::= <имя типа><описание глоб переменной> {[','] <описание глоб переменной>}<конец строки>

<global> ::= global '{' {<описание глоб переменных>} '}'

<public> ::= public

<private> ::= private

<extern> ::= extern '{' {(<описание функции> | <описание метода> | <описание оператора> | <описание свойства> )<конец строки>} '}'

<команда> ::= <define> | <func> | <method> | <text> | <operator> | <property> | <include> | <type> | <global> | <extern> | <import> | <public> | <private> | <ifdef>

<программа> ::= <команда> {<конец строки><команда>}

Редактировать