Cтраница 1
Инструкция сопоставления с образцом имеет вид VA, где V - переменная-субъект и А - образец. Условная передача управления изображается инструкцией VA: 1 ( MJ) S ( М2), где Ml и М2 - мотки перехода в случае неудачи и удачи сопоставления соответственно. Инструкция замещения имеет вид VA - - E, где К - строковое выражение, значение к-рого при успешном сопоставлении замещает в V выделенную подстроку. [1]
Образец ABORT полезен при построении условных инструкций сопоставления. [2]
Отдельные инструкции имеют общую синтаксическую базу - инструкцию сопоставления с образцом и подстановки. [3]
В первом случае каждый раз, когда выполняется инструкция сопоставления с одним и тем же образцом, создаются идентичные структуры данных для образца, которые затем сразу же перестают быть нужными. Это ведет к значи-тельному расходу памяти и времени выполнения. [4]
Сопоставление с образцом может присутствовать в инструкциях двух типов: инструкции сопоставления с образцом и инструкции замещения. [5]
Начальным значением переменной ABORT является примитивный образец, вызывающий немедленное завершение неудачей инструкции сопоставления. [6]
Появление одного-едпнственного пробела внутри инструкции Снобола 4 может превратить простой вызов подпрограммы в инструкцию сопоставления с образцом, что приведет при выполнении программы к целому каскаду ошибок в других ее частях; потребуется немало труда, чтобы выявить породившую их синтаксическую ошибку. Несоответствие между числом открывающих и числом закрывающих скобок в Лиспе приводит к аналогичным проблемам. Мы вправе требовать, чтобы удобство чтения программы учитывало и то обстоятельство, что на стадии отладки программа, содержащая серьезные ошибки, не должна выглядеть правильной. [7]
Пример программы на Сноболе 4. [8] |
Поскольку эта инструкция имеет метку REV, она является первой инструкцией тела REVERSE. При вызове REVERSE формальному параметру X присваивается значение фактического параметра, локальной переменной Y и переменной REVERSE ( используемой для возвращаемого значения функции) присваиваются в качестве начальных значений пустые цепочки и происходит передача управления на рассматриваемую инструкцию. Эта инструкция сопоставления с образцом используется для удаления начальных пробелов из цепочки-аргумента X. Образец определяется как POS ( O) SPAN (), что можно прочесть следующим образом: начиная с левого конца обрабатываемой цепочки ( с позиции 0), выделить в ней максимальную по длине последовательность пробелов. Имя обрабатываемой цепочки, X, помещается перед образцом. [9]
Образец - это объект данных, который может быть очень большим, если образец сложный. Невычисляемые выражения позволяют избежать конструирования образцов в инструкциях сопоставления, даже если меняются компоненты образца. Невычисляемое выражение эквивалентно указателю на другой образец, который используется во время сопоставления, когда встречается невычисляемое выражение. [10]
Если вычисление завершилось успешно, полученное значение становится частью образца и процесс сопоставления продолжается. Если вычисление завершилось неудачей, сканер возвращается назад в поисках альтернативы. Неудача при вычислении выражения не обязательно приводит к неудачному завершению инструкции сопоставления в целом. [11]
В простейшем случае выражение, определяющее образец, помещается непосредственно в инструкцию сопоставления, в которой должен использоваться этот образец. [12]
При сопоставлении с образцом анализируемая цепочка STR проходится слева направо. Первоначально LEFT и CURSOR указывают на самую левую литеру в STR, a NEEDLE - на первую альтернативу в PAT. NEEDLE продвигается по образцу, который имеет форму дерева альтернатив. Одновременно CURSOR передвигается по анализируемой цепочке вправо. Если найдено полное соответствие, то операция сопоставления с образцом заканчивается успешно, а окончательные положения LEFT и CURSOR выделяют в STR найденную подцепочку. Если инструкция, вызвавшая сопоставление, была инструкцией сопоставления с образцом и подстановки, то найденная подцепочка заменяется на указанную подставляемую цепочку; в противном случае анализируемая цепочка не меняется. [13]