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

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, а в e↑e↑e— последнее выражение E↑E.

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

(=) $<•( $<•id

(<• ( id •> $ ) •> $

(<• id id •>) ) •>)

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

Пример 23

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

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

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

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

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

+

-

*

/

↑

id

(

)

$

+

•>

•>

<•

<•

<•

<•

<•

•>

•>

-

•>

•>

<•

<•

<•

<•

<•

•>

•>

*

•>

•>

•>

•>

<•

<•

<•

•>

•>

/

•>

•>

•>

•>

<•

<•

<•

•>

•>

↑

•>

•>

•>

•>

<•

<•

<•

•>

•>

id

•>

•>

•>

•>

•>

•>

•>

(

<•

<•

<•

<•

<•

<•

<•

=

)

•>

•>

•>

•>

•>

•>

•>

$

<•

<•

<•

<•

<•

<•

<•

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