Прямое определение значения программы.

      Комментарии к записи Прямое определение значения программы. отключены

Следующие главы будут развивать программное исчисление, что позволит вычислять P для любой программы. Однако, часто в простых случаях возможно определить P неформально, точно зафиксировав что делает программа P с помощью неформального анализа.

Любая программа, используя оператор READ, может встретить маркер конца строки или конца файла, что усложняет значение программы. Например, пусть Q – программа:

PROGRAM ReadWriteRead(INPUT, OUTPUT);

VAR

Ch: CHAR;

BEGIN

READ(Ch);

WRITELN(Ch);

READ(Ch)

END.

Входной файл может быть организован как список строк, каждая из которых завершена маркером конца строки. Здесь есть несколько вариантов, которые следует рассмотреть.

Если список пуст, первый оператор READ приведет к ошибке выполнения. Если INPUT — 1-список, и его единственная строка – пустая строка, первый оператор READ прочитает маркер конца строки (как пробел), а второй приведет к аварийному завершению работы.

Если первая строка в INPUT не пуста, тогда первый оператор READ возвратит первый символ, второй оператор READ вернет либо второй символ, либо маркер конца строки, если второй символ отсутствует. В этом случае Q выполняется корректно и выводит первый символ первой строки INPUT в OUTPUT. Если INPUT 2- или более-список, и первая строка пуста, тогда оператор READ возвращает символ конца строки как пробел, а второй оператор RED берет первый символ второй строки, если таковой имеется, или ее маркер конца строки. В этом случае Q выполняется корректно и записывает пробел в OUTPUT. Этот анализ суммируется в следующей нотации для Q, как преобразования INPUT в OUTPUT.

Q = {: L ¹ , L1 ¹ ††, M = ,} E

{: L ¹ , ? L ¹ , L1 = ††, M =†?†}

Отметим, что здесь L1, первый элемент списка L здесь означает первую строку в INPUT.

Область определения и область значений Q могут быть определены прямо из Q путем нахождения первого и второго элементов в парах. Область определения – список строк

domain (Q) = {L : L ¹ , L1 ¹ †† } E { L : L ¹ , ? L ¹ , L1 = ††}

Для range (Q) вторые элементы пар 1-списки 1-строк, и единственный символ это либо начальный символ строки или пробел. Таким образом,

range (Q) = {M : M – 1-список, содержащий 1-строку}

Необходимо отметить, что значение программы просто пропускает пары, для которых не существует корректное выполнение, например, для которых L – пустой список или 1-список с элементом — пустой первой строкой.

Рассмотрим R:

PROGRAM CopyTwice(INPUT, OUTPUT);

VAR

Ch: CHAR;

BEGIN

READ(Ch);

READ(Ch);

WRITE (Ch);

WRITELN(Ch);

END.

Для того, чтобы записать значение R, нужно найти второй символ, если таковой есть списка строк L в INPUT, учитывая встречаемость строковых маркеров.

Условия Комментарии
L= аварийное завершение
L ¹ рассмотреть L1
L1 = †† рассмотреть существование L2
? L = аварийное завершение
? L ¹ рассмотреть L2
L2 = †† напечатать пробел дважды
L2 ¹†† напечатать дважды ? L2
L1 ¹ †† рассмотреть L1
? L1 = †† напечатать пробел дважды
? L1 ¹†† напечатать дважды ? (? L1)

Как результат этого анализа значение R будет:

R = {: L ¹ , L1 = ††, ? L ¹ , L2 = ††, M = } E

{: L ¹ , L1 = ††, ? L ¹ , L2 ¹ ††, M = } E

{: L ¹ , L1 ¹ ††, ? L1 = ††, M = } E

{: L ¹ , L1 ¹ ††, ? L1 ¹ ††, M = }.

Заключение

Строки, списки и множества обеспечивают необходимый инструментарий для точного определения значений CF Pascal программ. Строки и списки используют операции конкатенации (), композиции (N)б и декомпозиции (? и ?). Рассматривая текстовые файлы как 3-список мы можем дать точное описание файловым манипуляциям, включая все сложные ситуации с границами строки допустимые последовательности операций.

Для множеств определены операции объединения (E), пересечения (C), и разности (–). Множества базовые математические понятия, используемые при создании отношений и функций, которые используются для анализа значений программ.

Box-нотация различает синтаксический аспект программы P (ее символьная строка) и семантический аспект P (функция ее значения).

Статьи к прочтению:

Прямое и переносное значение слова


Похожие статьи:

  • Значение заголовка программы и точки.

    ИСЧИСЛЕНИЕ ПОСЛЕДОВАТЕЛЬНЫХ ПРОГРАММ. Часть 6 развивает изложение программного исчисления для последовательных программ, что позволяет нам сформулировать…

  • Определение времени работы программы

    ……………….. ;фрагмент программы ………………. Сравнение содержимого Да (нету перехода через 0) Получаем результат на dx Sub dx,bx нет (переход через 0)…