Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все_пособие_редактир.doc
Скачиваний:
175
Добавлен:
31.10.2018
Размер:
2.51 Mб
Скачать

7.4.4 Нахождение отношений приоритетов операторов

Отношения приоритета операторов можно получить любым подходящим способом. Для языка арифметических выражений, подобие генерируемого грамматикой (7.1), можно использовать правила для выбора "правильных" основ отражающие ассоциативность и приоритет бинарных операторов.

1. Если оператор θ1 имеет более высокий приоритет, чем оператор θ2, определяем что θ1 > θ 2 и θ 2 < θ1. Например, если оператор * имеет более высокий приоритет, чем оператор +, то * •> + и + <• *. Эти отношения гарантируют, что при получении выражения вида E+E*E+E основой является E*E, и именно E*E будет свернуто первым.

2. Если θ1 и θ 2 представляют собой операторы равного приоритета (это может быть один и тот же оператор), то устанавливаем, что θ1 •> θ 2 и θ 2 •> θ1, если операторы левоассоциативны, и θ1 <• θ2 и θ2 <• θ1 в случае правоассоциативности. Например для левоассоциативных + и - устанавливаем, что +•>- , -•>- и - •> + . Для правоассоциативного оператора ↑ следует принять, что ↑<• ↑. Такие отношения гарантируют, что в выражении E-E+E основой является E-E, а в eee— последнее выражение E↑E.

3. Для всех операторов θ определяем отношения θ <• id , id •> θ , θ <• (, (<•θ , ) •> θ •>), θ •> $ и $ <• θ. Кроме того, считаем, что

(=) $<•( $<id

(< ( id •> $ ) •> $

(< id id •>) ) •>)

Эти правила гарантируют, что и id, и (E) будут приведены к E. Кроме того, $ служит как левым, так и правым маркером конца строки, что заставляет основы находится между ними.

Пример 23

На рис. 34 приведены отношения приоритета операторов для грамматики (7.1) в предположении, что:

1. оператор ↑ имеет высший приоритет и правоассоциативен;

2. операторы * и / имеют приоритет следующего уровня и левоассоциативны;

3. операторы + и - имеют низший приоритет и левоассоциативны.

Пустые ячейки означают ошибки.

+

-

*

/

id

(

)

$

+

•>

•>

<•

<•

<•

<•

<•

•>

•>

-

•>

•>

<•

<•

<•

<•

<•

•>

•>

*

•>

•>

•>

•>

<•

<•

<•

•>

•>

/

•>

•>

•>

•>

<•

<•

<•

•>

•>

•>

•>

•>

•>

<•

<•

<•

•>

•>

id

•>

•>

•>

•>

•>

•>

•>

(

<•

<•

<•

<•

<•

<•

<•

=

)

•>

•>

•>

•>

•>

•>

•>

$

<•

<•

<•

<•

<•

<•

<•

Рис. 34. Отношения приоритета операторов