Читаем Учебное пособие по курсу «Нейроинформатика» полностью

 имя элемента аргумента-массива, если элементы массива имеют тип Тип

 результат приведения произвольного аргумента или элемента аргумента-массива к типу Тип.

В этом фрагменте содержится предложение, раскрывающее понятие <Аргумент типа Тип>, являющееся нетерминальным символом с параметром. Из последнего предложения легко понять, что представляет собой понятие <Аргумент типа Тип>. Для описания этого понятия в соответствии с требованиями стандартной БНФ пришлось бы описывать отдельно следующие понятия: <Аргумент типа long>, <Аргумент типа real>, <Аргумент типа integer>, <Аргумент типа color>, <Аргумент типа logic>, <Аргумент типа string>, <Аргумент типа prealarray>, <Аргумент типа pintegerarray>, <Аргумент типа plongarray>, <Аргумент типа plogicarray>, <Аргумент типа pstring>, <Аргумент типа visual>, <Аргумент типа pointer>, <Аргумент типа functype>. Кроме того, пришлось бы отказаться от простой и понятной конструкции описания формальных аргументов. Ниже приведена часть конструкции описания формальных аргументов, которую пришлось бы включить в БНФ. В данном фрагменте приведена расшифровка только одного понятия — <Аргумент типа long>. Остальные нераскрытые понятия описываются аналогично. Понятия <Идентификатор> и <Номер элемента> считаются раскрытыми ранее.

<Список формальных аргументов>::= <Формальный аргумент> [; <Список формальных аргументов>]

<Формальный аргумент>::= {<Формальный аргумент типа Long> | <Формальный аргумент типа Real> | <Формальный аргумент типа Integer> | <Формальный аргумент типа Color> | <Формальный аргумент типа Logic> | <Формальный аргумент типа String> | <Формальный аргумент типа PRealArray> | <Формальный аргумент типа PIntegerArray> | <Формальный аргумент типа PLongArray> | <Формальный аргумент типа PLogicArray> | <Формальный аргумент типа PString> | <Формальный аргумент типа Visual> | <Формальный аргумент типа Pointer> | <Формальный аргумент типа FuncType>}

<Формальный аргумент типа Long>::= <Список имен аргументов типа Long>: Long;

<Список имен аргументов типа Long>::= <Имя аргумента типа Long> [,<Список имен аргументов типа Long>]

<Имя аргумента типа Long>::= <Идентификатор>

<Аргумент типа Long>::= {<Имя аргумента типа Long> | <Имя аргумента типа PLongArray>^[ <Номер элемента>] | TLong( <Имя произвольного аргумента>) }

<Имя произвольного аргумента>::= <Имя аргумента типа Long>, <Имя аргумента типа Real>, <Имя аргумента типа Integer>, <Имя аргумента типа Color>, <Имя аргумента типа Logic>, <Имя аргумента типа String>, <Имя аргумента типа PRealArray>, <Имя аргумента типа PIntegerArray>, <Имя аргумента типа PLongArray>, <Имя аргумента типа PLogicArray>, <Имя аргумента типа PString>, <Имя аргумента типа Visual>, <Имя аргумента типа Pointer>, <Имя аргумента типа FuncType>

Третье четвертое и пятое предложения данного фрагмента пришлось бы повторить для каждого из остальных тринадцати типов аргументов. Поскольку приведенные в книге БНФ описания языков призваны задать и объяснить синтаксис языка, а не служить исходным кодом компилятора компиляторов, автор счел возможным отступить от канонов БНФ, тем более, что для профессионала в области языков программирования не составит большого труда заменить неформальные конструкции на точные формальные фрагменты.

Описание общих синтаксических конструкций
Перейти на страницу:

Похожие книги