Если
в методе операторного предшествования вместо матрицы предшествования
использовать функции операторного предшествования, то обнаружится, что
алгоритм этого метода при переводе в обратную польскую запись практически
такой же, как в методе стека с приоритетами. Стек распознавателя
играет здесь роль стека операций, функция , по
существу, задает стековый приоритет ограничителей (терминальных символов), а
функция
задает сравнительный приоритет. Для
полной аналогии можно ввести процедуру выделения операндов
(идентификаторов и констант) до записи их в стек и особую процедуру обработки
скобок, как это сделано в методе стека с приоритетами.
Следовательно, можно считать, что метод
операторного предшествования есть обобщение метода стека с
приоритетами для языков, порождаемых грамматиками с операторным
предшествованием, а общий метод предшествования - обобщение этих двух методов
для языков, порождаемых грамматиками предшествования. Надо, однако,
отметить, что грамматики с операторным, предшествованием в общем случае не
являются подмножеством грамматик предшествования. В самом деле, грамматика
G1 является грамматикой с операторным
предшествованием, но не грамматикой предшествования, хотя ее можно
привести к эквивалентной грамматике предшествования .
Заметим,
что отмеченные выше обобщения нетривиальны, поскольку, например, метод стека с
приоритетами в чистом виде применим лишь в том случае, когда существуют
функции операторного предшествования и
, в то время как метод операторного
предшествования применим в более общем случае, когда существует лишь матрица
операторного предшествования, что не гарантирует, вообще говоря, существования
функции операторного предшествования.
Необходимо также заметить, что в чистом виде метод стека с приоритетами неприменим к языкам типа Алгол-60. Чтобы «подогнать» этот метод для трансляции условных операторов и операторов цикла, приходится вводить дополнительные переменные состояния и другие уточнения общего алгоритма. Аналогичные замечания можно сделать и в отношении всех методов предшествования: некоторые особенности реального входного языка почти всегда приходится учитывать в семантических подпрограммах.
Основное достоинство методов, основанных на предшествовании, простота алгоритмов распознавателя. Другое важное преимущество—наличие общих алгоритмов, позволяющих:
проверить, является ли грамматика грамматикой предшествования (или расширенного предшествования, или операторного предшествования);
отыскать отношения предшествования (операторного предшествования);
вычислить значения функций предшествования (операторного предшествования), если они существуют;
построить таблицы правых и левых троек для метода расширенного предшествования.
Существование таких алгоритмов дает возможность создать конструктор, автоматически составляющий распознаватель для любой грамматики предшествования (или расширенного предшествования, или операторного предшествования).
Однако при практическом построении и эксплуатации транслятора большое значение имеет не только простота алгоритма распознавателя, но также общий объем распознавателя, его быстродействие, простота приведения грамматики реального языка к грамматике со стандартными свойствами и возможность учета в распознавателе неформализованных особенностей языка.
В языках типа Алгол-60, Фортран, Кобол, ПЛ/1 число порождающих правил колеблется от 200 до 1000. Например, в эталонном Алголе-60 насчитывается 369 правил. Даже после исключения правил, которые не используются в реальных входных языках, в Алголе-60 остается 200—300 правил. Следовательно, таблица порождающих правил реального языка высокого уровня может быть достаточно велика. Таблица большого объема, с одной стороны, занимает много места в памяти, а с другой стороны, замедляет трансляцию за счет дополнительных операций поиска правила для редукции. Например, даже при двоичном поиске правила в таблице для Алгола-60 требуется не менее 9 сравнений (20—30 машинных операций). Относительно большой объем таблиц — недостаток всех методов, основанных на предшествовании.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.