IMPORT Out;
VAR
- msg : ARRAY 20 OF CHAR;
+ i : INTEGER;
BEGIN
Out.Open;
- COPY("Hello World!", msg);
- Out.String(msg); Out.Ln;
- COPY("Hell!", msg);
- Out.String(msg); Out.Ln;
- COPY("The quick brown fox jumps over the lazy dog", msg);
- Out.String(msg); Out.Ln;
- msg := "Hello World!";
- Out.String(msg); Out.Ln;
+ i := 48;
+ FOR i := 32 TO i DO
+ Out.Int(i, 0); Out.Char(' ');
+ END;
+ Out.Ln;
END Test.
--- /dev/null
+MODULE Test7;
+
+IMPORT Out;
+
+VAR
+ i : INTEGER;
+
+BEGIN
+ Out.Open;
+ i := 48;
+ FOR i := 32 TO i DO
+ Out.Int(i, 0); Out.Char(' ');
+ END;
+ Out.Ln;
+END Test7.
+
+Проверка корректности FOR.
+Сначала должна вычисляться выражение TO и только потом присвоение индекса.
+Результат должен быть: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
- Сделать проверку повторов в CASE и выполнять прирывание при отсутствии ELSE.
-- В FOR сначала должна вычисляться переменная temp.
- Сделать выполнение прерывания при отсутствии ELSE в операторе WITH.
- Сделать нормальную проверку наличия RETURN.
- Запретить массивы и записи как результат процедуры-функции.
maketest Test4
maketest Test5
maketest Test6
+maketest Test7
return i;
}
- /* Встроенная процедура COPY(x, v) */
public static void COPY(byte[] x, byte[] v)
{
int len_x = LEN(x);
index = oberon_ident_item(ctx, iname);
oberon_assert_token(ctx, ASSIGN);
from = oberon_expr(ctx);
- oberon_assign(ctx, from, index);
oberon_assert_token(ctx, TO);
bound = oberon_make_temp_var_item(ctx, index -> result);
to = oberon_expr(ctx);
- oberon_assign(ctx, to, bound);
+ oberon_assign(ctx, to, bound); // сначала temp
+ oberon_assign(ctx, from, index); // потом i
if(ctx -> token == BY)
{
oberon_assert_token(ctx, BY);