Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






A13. Грамматика






 

Ниже приведены грамматические правила, которые мы уже рассматривали в данном приложении. Они имеют то же содержание, но даны в ином порядке.

Здесь не приводятся определения следующих символов-терминов: целая-константа, символьная-константа, константа-с-плавающей-точкой, идентификатор, строка и константа-перечисление. Слова, набранные обычным латинским шрифтом (не курсивом), и знаки рассматриваются как символы-термины и используются точно в том виде, как записаны. Данную грамматику можно механически трансформировать в текст, понятный системе автоматической генерации грамматического распознавателя. Для этого помимо добавления некоторых синтаксических пометок, предназначенных для указания альтернативных продукций, потребуется расшифровка конструкции со словами " один из" и дублирование каждой продукции, использующей символ с индексом необ., причем один вариант продукции должен быть написан с этим символом, а другой - без него. С одним изменением, а именно - удалением продукции typedef-имя: идентификатор и объявлением typedef-имени символом-термином, данная грамматика будет понятна генератору грамматического распознавателя YACC. Ей присуще лишь одно противоречие, вызываемое неоднозначностью конструкции if-else.

единица–трансляции:

внешнее-объявление

единица-трансляции внешнее-объявление

внешнее-объявление:

определение-функции

объявление

определение функции:

спецификаторы-объявлениянеоб объявитель

список-объявленийнеоб составная-инструкция

объявление:

спецификаторы-объявления список-инициализаторов-объявителейнеоб

список-объявлений:

объявление

список-объявлений объявление

спецификаторы-объявления:

спецификатор-класса-памяти спецификаторы-объявлениянеоб

спецификатор-типа спецификаторы-объявлениянеоб

квалификатор-типа спецификаторы-объявлениянеоб

спецификатор-класса-памяти: один из

auto register static extern typedef

спецификатор-типа: один из

void char short int long float double signed unsigned

спецификатор-структуры-или-объединения

спецификатор-перечисления

typedef-имя

квалификатор-типа: один из

const volatile

спецификатор-структуры-или-объединения:

структуры-или-объединения-идентификаторнеоб { список-объявлений-структуры }

структуры-или-объединения идентификатор

структура-или-объединение: одно из

struct union

список-объявлений-структуры:

объявление-структуры

список-объявлений-структуры объявление-структуры

список-объявителей-ииициализаторов:

объявитель-инициализатор

список-объявителей-инициализаторов, объявитель-инициализатор

объявитель-инициализатор:

объявитель

объявитель = инициализатор

объявление-структуры:

список-спецификаторов-квалификаторов список-объявителей-структуры

список-спецификаторов-квалификаторов:

спецификатор-типа список-спецификаторов-квалификаторовнеоб

квалификатор-типа список-спецификаторов-квалификаторовнеоб

список-структуры-объявителей:

структуры–объявитель

список-структуры-объявителей, структуры-объявитель

структуры-объявитель:

объявитель

объявительнеоб: константное-выражение

спецификатор-перечисления:

enum идентификаторнеоб { список-перечислителей }

enum идентификатор

список-перечислителей:

перечислитель

список-перечислителей перечислитель

перечислитель:

идентификатор

указательнеоб собственно-объявитель

собственно-объявитель:

идентификатор

(объявитель)

собственно-объявитель [ константное-выражениенеоб ]

собственно-объявитель (список-типов-параметров)

собственно-объявитель (список-идентификаторовнеоб)

указатель:

* список~квалификаторов-типанеоб

* список-квалификаторов-типанеоб указатель

список-квалификаторов-типа:

квалификатор-типа

список-квалификаторов-типа квалификатор-типа

список-типов-параметров:

список-параметров

список-параметров,...

список-параметров:

объявление-параметра

список-параметров, объявление-параметра

объявление-параметра:

спецификаторы-объявления объявитель

спецификаторы-объявления абстрактный-объявительнеоб

список-идентификаторов:

идентификатор

список-идентификаторов, идентификатор

инициализатор:

выражение-присваивания

{ список-инициализаторов }

{ список-инициализаторов, }

список-инициализаторов:

инициализатор

список-инициализаторов, инициализатор

имя-типа:

список-спецификаторое-квалификаторов абстрактный-объявительнеоб

абстрактный-объявитель:

указатель

указательнеоб собственно-абстрактный-объявитель

собственно-абстрактный-объявитель:

(абстрактный-объявитель)

собственно-абстрактный-объявительнеоб [ константное-выражениенеоб ]

собственно-абстрактный-объявительнеоб (список-типов-параметровнеоб)

typedef-имя:

идентификатор

инструкция:

помеченная-инструкция

инструкция–выражение

составная-инструкция

инструкция-выбора

циклическая-инструкция

инструкция-перехода

помеченная-инструкция:

идентификатор: инструкция

case константное-выражение: инструкция

default: инструкция

инструкция-выражение:

выражениенеоб;

составная-инструкция:

(список-объявленийнеоб список-инструкцийнеоб)

список-инструкций:

инструкция

список-инструкций инструкция

инструкция-выбора:

if (выражение) инструкция

if (выражение) инструкция else инструкция

switch (выражение) инструкция

циклическая-инструкция:

while (выражение) инструкция

do инструкция while (выражение)

return выражениенеоб;

выражение:

выражение-присваивания

выражение, выражение-присваивания

выражение-присваивания:

условное-выражение

унарное-выражение оператор-присваивания выражение-присваивания

оператор-присваивания: один из

= *= /= %= += -= < < = > > = & = ^= |=

условное-выражение:

логическое-ИЛИ-выражение

логическое-ИЛИ-выражение? выражение: условное-выражение

константное-выражение:

условное-выражение

логическое-ИЛИ-выражение:

логическое-И-выражение

логическое-ИЛИ-выражение || логическое-И-выражение

логическое-И-выражение:

ИЛИ-выражение

логическое-И-выражение & & ИЛИ-выражение

ИЛИ-выражение:

исключающее-ИЛИ-выражение

ИЛИ-выражение | исключающее-ИЛИ-выражение

исключающее-ИЛИ-выражение:

И-выражение

исключающее-ИЛИ-выражение ^ И-выражение

И-выражение:

выражение-равенства

И-выражение & выражение-равенства

выражение-равенства:

выражение-отношения

выражение-равенства == выражение-отношения

выражение-равенства! = выражение-отношения

выражение-отношения:

сдвиговое-выражение

выражение-отношения < сдвиговое-выражение

выражение-отношения > сдвиговое-выражение

выражение-отношения < = сдвиговое-выражение

выражение-отношения > = сдвиговое-выражение

сдвиговое-выражение:

аддитивное-выражение

сдвиговое-выражение > > аддитивное-выражение

сдвиговое-выражение < < аддитивное-выражение

аддитивное-выражение:

мультипликативное-выражение

аддитивное-выражение + мультипликативное-выражение

аддитивное-выражение - мультипликативное-выражение

мультипликативное-выражение:

выражение-приведенное-к-типу

мультипликативное-выражение * выражение-приведенное-к-типу

мультипликативное-выражение / выражение-приведенное-к-типу

мультипликативное-выражение % выражение-приведенное-к-типу

выражение-приведенное-к-типу:

унарное-выражение

(имя-типа) выражение-приведенное-к-типу

унарное-выражение:

постфиксное –выражение

++ унарное-выражение

-- унарное-выражение

унарный-оператор выражение-приведенное-к-типу

sizeof унарное-выражение

sizeof(имя-типа)

унарный-оператор: один из

& * + - ~!

постфиксное-выражение:

первичное-выражение

постфиксное-выражение [ выражение ]

постфиксное-выражение (список-аргументов-выраженийнеоб)

постфиксное-выражение, идентификатор

постфиксное-выражение -> идентификатор

постфиксное-выражение ++

постфиксное-выражение --

первичное -выражение:

идентификатор

константа

строка

(выражение)

список-аргументов-выражений:

выражение-присваивания

список-аргументов-выражений, выражение-присваивания

константа:

целая-константа

символьная-константа

константа-с-плавающей-точкой

константа-перечисление

Ниже приводится грамматика языка препроцессора в виде перечня структур управляющих строк. Для механического получения программы грамматического разбора она не годится. Грамматика включает символ текст, который означает текст обычной программы, безусловные управляющие строки препроцессора и его законченные условные конструкции.

управляющая-строка:

#define идентификатор последовательность-лексем

#define идентификатор (идентификатор,..., идентификатор) последовательность-лексем

#undef идентификатор

#include < имя-файла >

#include " имя-файла "

#include последовательность-лексем

#line константа " идентификатор "

#line константа

#error последовательность-лексем необ

#pragma последовательность-лексем необ

#

условная-конструкция-препроцессора

условная-конструкция-препроцессора:

if-строка текст elif-части else-часть необ #endif

if-строка:

#if константное-выражение

#ifdef идентификатор

#ifndef идентификатор

elif-части:

elif-строка текст

elif-части необ

elif-строка:

#elif константное-выражение

else-часть:

else-строка текст

else-строка:

#else

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.021 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал