Cтраница 2
Если очередной элемент во входной строке является наименованием переменной, то он выдается в качестве операнда и указатель во входной строке продвигается вперед. В противном случае очередной элемент должен оказаться операцией. Организуется список из трех элементов, операция заносится в первый элемент списка, и указатель во входной строке продвигается. Затем два раза выполняется Получение операнда, и полученные два операнда заносятся в список. [16]
Проверяется очередной символ во входной строке. [17]
Если текущий символ во входной строке является закрывающей скобкой, то операции из стека последовательно переносятся в выходную строку до тех пор, пока на вершине стека не появится открывающая скобка; эта открывающая скобка отбрасывается. [18]
Если очередной элемент во входной строке является наименованием переменной, то он выдается в качестве операнда и указатель во входной строке продвигается вперед. В противном случае очередной элемент должен оказаться операцией. Организуется список из трех элементов, операция заносится в первый элемент списка, и указатель во входной строке продвигается. Затем два раза выполняется Получение операнда, и полученные два операнда заносятся в список. [19]
Обычно нисходящий распознаватель просматривает символы входной строки и символы правой части применяемого правила слева направо. Такие распознаватели называют левосторонними. [20]
Начальный символ получен, следовательно, входная строка синтаксически правильна. [21]
![]() |
Использование стека операций для перевода выражений в обратную польскую запись. [22] |
Арифметическое или логическое выражение рассматривается как входная строка символов. Входная строка просматривается слева направо. Если приоритет входного знака равен нулю или больше приоритета знака, находящегося в вершине стека, то новый знак добавляется к вершине стека. В противном случае из стека выталкивается и переписывается в выходную строку знак, находящийся в вершине, а также следующие за ним знаки с приоритетами. [23]
Посл - е просмотра всех символов входной строки происходит выталкивание всех оставшихся в стеке символов и дописывание их к выходной строке. [24]
Выполнение этого предиката не изменяет состояния входной строки. [25]
Перед выполнением - программы в качестве входной строки принимается стандартный вводной файл R INF. При необходимости переопределить входную строку может быть использована подпрограмма R USIN. Параметр Р задает память, которая будет использоваться в качестве новой входной строки. Параметр EOD задает имя комплекса команд, на который будет передано управление после окончания текста в подключенной памяти. Если параметр EOD опущен, то порядок обхода / - программы после окончания текста в подключенной памяти не изменится. [26]
По окончании работы машина справа от входной строки печатает Н, если число нулей равно числу единиц, Ч - в противном случае, и затем останавливается. [27]
Если выделяется макроопределение, контролирующее правильность входной строки, то в него включается и печать диагностических текстов; в противном случае печать диагностики делается в теле макроопределения, генерирующего последовательность команд для вычисления ( выражений. Диагностический текст должен точно указывать обнаруженную ошибку. [28]
Синтаксический контроль предполагает проверку соответствия структуры входной строки заданному синтаксису. Для рассматриваемого синтаксиса это сводится к проверке порядка следования операндов и операций во входной строке и соответствия операций заданному ( в данном варианте) набору. [29]
Когда вызывается NEXTKN, начинается просмотр текущей входной строки с первого символа, отличного от пробела, вслед за последней, ранее выделенной лексической единицей. Для выделения текущей лексической единицы строка просматривается, пока не будет обнаружен ее конец. [30]