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

 Левая часть 

 Правая часть 

 Примечание 

START 

 {

 NameBlock.add(currentLexem.textOfWord);

 ident

 :

 BLOCK

 }

 START

 внешняя структура блока

START 

BLOCK 

 vars

 ;

 BODYVARS

 VectorPFR.add(StrPFR.clone());StrPFR.removeAllElements();

 блок vars

BLOCK 

 join

 NameBlock.remove(NameBlock.size()-1);

 ;

 BODYJOIN

 блок join

BLOCK 

 do

 ;

 HEADING

 BODYDO

 VectorPFR.add(StrPFR.clone());StrPFR.removeAllElements();

 блок do

BODYDO 

 let

 StrPFR.add(currentLexem.textOfWord);

 ident

 Y

 StrPFR.add("let");

 ;

 BODYDO

 оператор присваивания внутри блока do или внутри последовательности операторов условного оператора

BODYDO 

 if

 USL

 StackIf .push (new Integer(++ifCnt));StrPFR.add("Label0_"+StackIf.peek());StrPFR.add("GF");

USLBODY

 StrPFR.add("Label1_"+StackIf.peek());StrPFR.add("GO");

Otherwise

 BODYDO

 условный оператор внутри блока do или внутри последовательности операторов условного оператора

BODYDO 

BODYJOIN 

 ident

 out

 ident

 sv

 ident

 in

 ident

 SV2

 ;

 BODYJOIN

 передача значений внутри блока join или заголовка

BODYJOIN 

BODYVARS 

 let

 StrPFR.add(currentLexem.textOfWord);

 ident

 Z

 StrPFR.add("let");

 ;

 BODYVARS

 оператор присваивания переменной константного значения внутри блока vars

BODYVARS 

HEADING 

 {

 BODYJOIN

 }

 заголовок есть

HEADING 

Otherwise 

 else

 StrPFR.add("Label0_"+StackIf.peek()+":");

USLBODY

 StrPFR.add("Label1_"+StackIf.pop()+":");

 else присутствует - условный оператор полный

Otherwise 

 StrPFR.remove(StrPFR.size()-1);StrPFR.remove(StrPFR.size()-1);StrPFR.add("Label0_"+StackIf.pop()+":");

 условный операторо не полный

 StackOp.push (currentLexem.textOfWord);

 op1

 VIR

 StrPFR.add(StackOp.pop ());

SV2 

 ,

 ident

 in

 ident

 SV2

 передача значения нескольким входам блоков

SV2 

 V

 W

USL 

 (

 VIR

 StackOp.push (currentLexem.textOfWord);

 otn

 VIR

 StrPFR.add(StackOp.pop ());

 )

USLBODY 

 {

 BODYDO

 }

 последовательность оператор внтури условного оператора

USLBODY 

 let

 StrPFR.add(currentLexem.textOfWord);

 ident

 Y

 StrPFR.add("let");

 ;

 внутри условного оператора только один оператор присваивания

 (

 VIR

 )

 StrPFR.add(currentLexem.textOfWord);

 ident

 StrPFR.add(currentLexem.textOfWord);

 const

VIR 

 U

 R

 арифметическое выражение

 StackOp.push (currentLexem.textOfWord);

 op2

 U

 StrPFR.add(StackOp.pop ());

 VIR

 let

 StrPFR.add(currentLexem.textOfWord);

 ident

 Y

 StrPFR.add("let");

 StrPFR.add(currentLexem.textOfWord);

 const

 let

 StrPFR.add(currentLexem.textOfWord);

 ident

 Z

 StrPFR.add("let");