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

А после формирования постфиксной записи совокупности операторов добавляется метка завершения оператора условия:

VectPFRBlock.add("Label2_"+StIf.pop()+":");

Если оператор условия имеет сокращённую форму, то из постфиксной записи удаляются два последних значения и вносится лишь метка завершения оператора условия:

VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.add("Label1_"+StIf.pop()+":");

Добавление сформированной постфиксной записи для текущего блока к постфиксной записи всей программы осуществляется следующим образом:

VectPFRTotal.add(VectPFRBlock.clone()); VectPFRBlock.removeAllElements();

Для демонстрации результатов работы на экран выводится сформированная постфиксная запись, части которой привязаны к соответствующим именам блоков. Ниже приведён программный код, обеспечивающий такой вывод:

<p><table border=1 align=center class=dh cellpadding=0 cellspacing=0 style="border-collapse:collapse">

 <tr class=bh><td colspan="2" align="center" style="background-color:lightgreen">Постфиксная запись</td></tr>

 <tr class=bh><td align=center>&nbsp;Имя блока&nbsp;</td><td align=center>&nbsp;Постфиксная запись&nbsp;</td></tr>

<%for (int i=0; i<VectPFRTotal.size(); i++)

{%><tr><td align=center><%=VectNames.get(i)%></td><td align=center><%=VectPFRTotal.elementAt(i)%></td></tr><%}%>

</table></p>

8.2. Результаты работы.

Постфиксная запись

 Имя блока 

 Постфиксная запись 

11

[a1, 5, let, b1, a, 10.3, +, 2, *, let, c1, b, a, /, let]

12

[a2, 34.24, let, b2, a1, a2, +, let, c2, b2, 4, /, let]

13

[x, 0, let, y, 0, let]

21

[x, aa1, aa2, *, 4, b1, b2, *, *, -, let, x, 0, >, b2, a1, !=, &&, Label1_2, JmpF, x, x, c1, -, let, Label2_2, Jmp, Label1_2:, x, 0, <, Label1_3, JmpF, x, x, x2, -, let, Label2_3, Jmp, Label1_3:, x, x, 2, *, let, Label2_3:, Label2_2:]

22

[y, cc1, cc2, +, let, y, 0, >=, cc1, cc2, bb1, +, <, ||, Label1_4, JmpF, y, y, x, +, let, Label2_4, Jmp, Label1_4:, y, 0, <, Label1_5, JmpF, y, x, 2, *, let, Label2_5, Jmp, Label1_5:, x, x, a1, +, let, y, x, 2, /, let, Label2_5:, Label2_4:]

9. Результаты работы с ошибочными входными данными.

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

1. Комментарий помещён в тело блока vars:

{11:vars;

    let a1 5;

    let b1 (a+10.3)*2;

Первый блок переменных

    let c1 b/a;

}    

    Проверяемый текст неверен.

Таблица идентификаторов

 Текст слова 

 Номер слова в группе 

a

2

a1

0

b1

1

Таблица целочисленных констант

 Текст слова 

 Номер слова в группе 

5

0

2

1

Таблица констант
с плавающей точкой

 Текст слова 

 Номер слова в группе 

10.3

0

Таблица служебных слов языка

 Текст слова 

 Номер слова в группе 

,

13

=>

12

join

6

)

9

?

10

(

8

let

7

do

5

or

11

;

4

:

1

}

2

{

0

vars

3

Постфиксная запись

 Имя блока 

 Постфиксная запись