Разработка языка, предназначенного для программирования потоковых вычислений, страница 13

{SemanticError.add("Семантическая ошибка: в связях определена передача разных значений одним переменным(конфликт)!");

return false;}}}

Результаты проверки лексически или синтаксически неверных программ и результаты работы семантических проверок

При обнаружении ошибок в проверяемой программе на этапе работы синтаксического анализатора в вектор SemanticError заносится сообщение об ошибке и происходит возвращение значения false из синтаксического анализатора. Поэтому результатом проверки любой программы с ошибками будет только вывод сообщения о неправильности и сообщения о типе ошибке. Вывод информации о построенных за время работы синтаксического анализатора структур не производится.

Сначала приведу пример лексической ошибки:

Допустим, в блоке 1vars1 вместо переменной а1 задали переменную 1а1:

{1vars1:vars;

let 1a1 let a2 2;

let b 2;}

            Результат будет таким:

Проверяемый текст неверен. [Лексическая или синтаксическая ошибка!]

Теперь приведу пример синтаксической ошибки:

            Допустим, в блоке 1vars1 был опущен оператор let:

{1vars1:vars;

let a1 let a2 2;

b 2;}

            Результат будет таким:

Проверяемый текст неверен. [Лексическая или синтаксическая ошибка!]

            Ну, а теперь примеры семантических ошибок:

1.         Допустим, вместо имени блока 2vars2 оставили имя 1vars1:

{1vars1:vars;

let a1 let a2 2;

letb 2;}…

{1vars1:vars;

let c 3;

let d 3;}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: одинаковые имена блоков!]

2.         Допустим, вместо переменной a2 написали a1:

{1vars1:vars;

let a1 let a1 2;

letb 2;}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: присвоение значения переменной самой себе!]

3.         Допустим, имя блока выхода и имя блока входа совпадают(1do1):

{1join1:join;

1vars1 _o_ a1 -> 1do1 _i_ x1;

1vars1 _o_ a2 -> 3do3 _i_ x42;

1vars1 _o_ b  ->  1do1 _i_ x2, 3do3 _i_ x43;

1do1 _o_ out1 -> 1do1 _i_ x41, 2do2 _i_ v3v2;

}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: связь осуществляет передачу значения внутри блока!]

4.         Допустим, имя блока выхода и имя блока входа совпадают(1do1):

{1join1:join;

1vars1 _o_ a1 -> 1vars1_i_ a1;

1vars1 _o_ a2 -> 3do3 _i_ x42;

1vars1 _o_ b  ->  1do1 _i_ x2, 3do3 _i_ x43;

1do1 _o_ out1 -> 3do3 _i_ x41, 2do2 _i_ v3v2;

}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: в связях имеется попытка изменить значение переменных блока vars c именем 1vars1!]

5.         Допустим, в качестве имени блока выхода задано asd (такого блока нет в программе):

{1join1:join;

asd_o_ a1 -> 1do1 _i_ x1;

1vars1 _o_ a2 -> 3do3 _i_ x42;

1vars1 _o_ b  ->  1do1 _i_ x2, 3do3 _i_ x43;

1do1 _o_ out1 -> 3do3 _i_ x41, 2do2 _i_ v3v2;

}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: в связях присутствует имя не идентифицированного блока!]

6.         Допустим, в качестве имени блока выхода задано 1vars1, а в качестве имени выхода q (такой переменной нет в блоке 1vars1):

{1join1:join;

1vars1 _o_ q -> 1do1 _i_ x1;

1vars1 _o_ a2 -> 3do3 _i_ x42;

1vars1 _o_ b  ->  1do1 _i_ x2, 3do3 _i_ x43;

1do1 _o_ out1 -> 3do3 _i_ x41, 2do2 _i_ v3v2;

}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: в связях имя выхода q и имя блока 1vars1 не соответствуют!]

7.         Допустим,  на вход x1 блока 1do1 значения передаются дважды:

{1join1:join;

1vars1 _o_ a1 -> 1do1 _i_ x1;

1vars1 _o_ a2 -> 3do3 _i_ x42;

1vars1 _o_ b  ->  1do1 _i_ x1, 3do3 _i_ x43;

1do1 _o_ out1 -> 3do3 _i_ x41, 2do2 _i_ v3v2;

}

            Результат будет таким:

Проверяемый текст неверен. [Семантическая ошибка: в связях определена передача разных значений одним переменным(конфликт)!]

            Приводить примеры ошибок можно до бесконечности. Считаю, что в этом нет необходимости, так как я привёл для каждого типа ошибок по одному примеру. Возможно, мною не учтены какие-либо другие типы ошибок, но пока я их не обнаружил.