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

Ассоциативность операторов

Читайте также:
  1. Глава 2. Вклад Бориса Мартоса в подготовку специалистов-кооператоров в Украинской Хозяйственной Академии
  2. Сбытовая сеть туроператоров Германии, 1993 г.

По соглашению 9+5+2 эквивалентно (9+5)+2, а 9-5-2 эквивалентно (9-5)-2. Когда операнд типа 5 имеет операторы и слева, и справа, необходимо установить, какой именно оператор использует этот операнд. Мы говорим, что оператор + левоассоциативен, поскольку операнд со знаками "плюс" с обеих сторон используется левым операто­ром. В большинстве языков программирования четыре арифметических оператора — сложение, вычитание, умножение и деление — левоассоциативны.

Некоторые распространенные операторы, например возведение в степень, правоассоциативны. Другим примером правоассоциативного оператора может служить оператор присвоения (=) в С, где выражение а=b=с трактуется как а= (b=с).

Строки типа а=b=с с правоассоциативным оператором генерируются следующей грамматикой.

right → letter = right | letter

letter → a|b|…|z

Различия между деревьями разбора для левоассоциативных операторов типа "-" и правоассоциативных операторов вроде "=" показаны на рис. 2.4. Обратите внимание, что дерево разбора для 9-5-2 растет вниз влево, в то время как дерево разбора для а=b=с вниз вправо.

 
 
 
list
list
digit
-
list
digit
-
digit
b
a
right
letter
right
=
letter
right
=
c
letter

 


Рис. 2.4. Деревья разбора для лево- и правоассоциативных операторов

 


[1] В настоящее время наличие языка структурированных запросов SQL снимает вопрос о том, явля­ется ли интерпретация запросов задачей, всего лишь схожей с компиляцией. — Прим. перев.

 

[2] Здесь следует обратить внимание на перевод термина statement. Дословно statement означает вы­сказывание, утверждение, однако в применении к компьютерной тематике это не совсем удачно. Обычно при переводе используется термин оператор, но в данной книге, посвященной формальным языкам, этот термин имеет собственное значение. Поэтому при переводе термина statement за редкими исключениями было использовано понятие инструкция — как наиболее близкое по смыслу, так и уже используемое при описании языка, например, в книге Б. Страуструп. Язык программирования С++, 3-е изд. — СПб.; М.: "НевскийДиалект"— "ИздательствоБИНОМ", 1999.Прим. перев.

[3] Следует упомянуть о важности вопроса выделения памяти для размещения идентификаторов исход­ной программы. Как мы увидим в главе 7, "Среды времени исполнения", распределение памяти в процессе работы зависит от компилируемого языка. Принятие решения о выделении памяти происходит либо в про­цессе создания промежуточного кода, либо при генерации целевого кода.

[4] "Почти произвольные" строки, поскольку производится только простое сканирование макроса. Как только при сканировании находится символ, соответствующий тексту, следующему после #i в шабло­не, сканированная строка считается соответствующей формальному параметру #i. Таким образом, если мы попытаемся подставить ab; cd вместо #1, обнаружим, что параметру #1 соответствует строка ab, а параметру #2 — строка cd.

[5] Slanted — наклоненный. — Прим. перев.

[6] Вообше говоря, нетерминал представляет множество последовательностей токенов. — Прим. ред.

[7] Отдельные символы, выделенные курсивом, будут использоваться и для других целей при деталь­ном изучении грамматики в главе 4, "Синтаксический анализ". Например, они будут применяться при указании символов, которые могут представлять собой либо токены, либо нетерминалы. Однако выде­ленное курсивом имя из двух или более символов будет всегда означать нетерминал.


Дата добавления: 2015-11-30; просмотров: 21 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.006 сек.)