Синтаксис
Левая часть |
Правая часть |
Примечание |
|||||||||||
BLOCK |
StIf.push (new Integer(0)); ignore.t(); |
{ |
VectNames.add(currentLexem.textOfWord); |
int |
ignore.f(); |
: |
BLOCKTYPE |
} |
BLOCK |
Общая структура блока. |
|||
BLOCK |
|||||||||||||
BLOCKTYPE |
vars |
; |
BODYVARS |
PENTAD |
VectPFRTotal.add(VectPFRBlock.clone()); VectPFRBlock.removeAllElements(); |
Внутренняя структура блока vars. |
|||||||
BLOCKTYPE |
do |
; |
BODYDO |
PENTAD |
VectPFRTotal.add(VectPFRBlock.clone()); VectPFRBlock.removeAllElements(); |
Внутренняя структура блока do. |
|||||||
BLOCKTYPE |
join |
ignore.t(); VectNames.remove(VectNames.size()-1); |
; |
BODYJOIN |
ignore.f(); |
Внутренняя структура блока join. |
|||||||
BODYVARS |
let |
VectPFRBlock.add(currentLexem.textOfWord); |
id |
EXP |
VectPFRBlock.add("let"); |
; |
BODYVARS |
Оператор присваивания в блоке vars |
|||||
BODYVARS |
|||||||||||||
EXP |
U |
R |
Арифметическое выражение. |
||||||||||
R |
StOp.push (currentLexem.textOfWord); |
op1 |
EXP |
VectPFRBlock.add(StOp.pop ()); |
Операции [+-]. |
||||||||
R |
|||||||||||||
U |
V |
W |
|||||||||||
W |
StOp.push (currentLexem.textOfWord); |
op2 |
U |
VectPFRBlock.add(StOp.pop ()); |
Операции [*/]. |
||||||||
W |
|||||||||||||
V |
( |
EXP |
) |
Использование скобок. |
|||||||||
V |
VectPFRBlock.add(currentLexem.textOfWord); |
id |
Идентификатор. |
||||||||||
V |
VectPFRBlock.add(currentLexem.textOfWord); |
float |
Константа с плавающей точкой. |
||||||||||
V |
VectPFRBlock.add(currentLexem.textOfWord); |
int |
Целочисленная константа. |
||||||||||
BODYDO |
let |
VectPFRBlock.add(currentLexem.textOfWord); |
id |
EXP |
VectPFRBlock.add("let"); |
; |
BODYDO |
Оператор присваивания в блоке do. |
|||||
BODYDO |
? |
EXP |
StOp.push (currentLexem.textOfWord); |
relation |
EXP |
VectPFRBlock.add(StOp.pop ()); |
IF |
StIf .push (new Integer(++CntIf)); VectPFRBlock.add("Label1_"+StIf.peek()); VectPFRBlock.add("JmpF"); |
IFBODY |
VectPFRBlock.add("Label2_"+StIf.peek()); VectPFRBlock.add("Jmp"); |
ELSE |
BODYDO |
Общая структура условного оператора. |
BODYDO |
|||||||||||||
IF |
StOp.push (currentLexem.textOfWord); |
logic |
EXP |
StOp.push (currentLexem.textOfWord); |
relation |
EXP |
VectPFRBlock.add(StOp.pop ()); VectPFRBlock.add(StOp.pop ()); |
IF |
Объединение логических выражений в условном операторе. |
||||
IF |
|||||||||||||
IFBODY |
{ |
BODYDO |
} |
Тело условного оператора (несколько операций). |
|||||||||
IFBODY |
let |
VectPFRBlock.add(currentLexem.textOfWord); |
id |
EXP |
VectPFRBlock.add("let"); |
; |
Тело условного оператора (операция присваивания). |
||||||
IFBODY |
? |
EXP |
StOp.push (currentLexem.textOfWord); |
relation |
EXP |
VectPFRBlock.add(StOp.pop ()); |
IF |
StIf .push (new Integer(++CntIf)); VectPFRBlock.add("Label1_"+StIf.peek()); VectPFRBlock.add("JmpF"); |
IFBODY |
VectPFRBlock.add("Label2_"+StIf.peek()); VectPFRBlock.add("Jmp"); |
ELSE |
Вложенный условный оператор. |
|
ELSE |
or |
VectPentadMarks.add("Label1_"+StIf.peek()+":"); VectPFRBlock.add(VectPentadMarks.lastElement()); |
IFBODY |
VectPentadMarks.add("Label2_"+StIf.pop()+":"); VectPFRBlock.add(VectPentadMarks.lastElement()); |
Альтернатива условного оператора. |
||||||||
ELSE |
|
VectPentadMarks.add("Label1_"+StIf.pop()+":"); VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.remove(VectPFRBlock.size()-1); VectPFRBlock.add(VectPentadMarks.lastElement()); |
Неполный условный оператор (альтернатива отсутствует). |
||||||||||
BODYJOIN |
int |
out |
id |
=> |
int |
in |
id |
JOIN |
; |
BODYJOIN |
Определение связей в блоке join. |
||
BODYJOIN |
|||||||||||||
JOIN |
, |
int |
in |
id |
JOIN |
Расширенное определение связей. |
|||||||
JOIN |
|||||||||||||
PENTAD |
Object Mark = (Object)(new String(""));for (int i=0; i<VectPFRBlock.size(); i++){StPentad.push(VectPFRBlock.get(i));if (StPentad.peek()=="let"){VectPentadString.add(Mark);VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());VectPentadString.add("null");VectPentadString.add(StPentad.pop());VectPentadBlock.add(VectPentadString.clone());VectPentadString.removeAllElements();Mark = (Object)(new String(""));}else if (VectPentadOp.contains(StPentad.peek())==true){VectPentadString.add(Mark);VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());StPentad.push("tmpValue"+HTid.size());lexem tmp = new lexem();tmp.wordIndex = HTid.size();HTid.put(StPentad.peek(),tmp);VectPentadString.add(StPentad.peek());VectPentadBlock.add(VectPentadString.clone());VectPentadString.removeAllElements();Mark = (Object)(new String(""));}else if (i+1==VectPFRBlock.size() || i+1<VectPFRBlock.size() && VectPentadMarks.contains(StPentad.peek())==true && VectPentadMarks.contains(VectPFRBlock.get(i+1))==true){VectPentadString.add(StPentad.pop());VectPentadString.add("null");VectPentadString.add("null");VectPentadString.add("null");VectPentadString.add("null");VectPentadBlock.add(VectPentadString.clone());VectPentadString.removeAllElements();}else if (VectPentadMarks.contains(StPentad.peek())==true) Mark = (Object)(StPentad.pop());else if (StPentad.peek()=="JmpF"){VectPentadString.add(Mark);VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());VectPentadString.add("null");VectPentadBlock.add(VectPentadString.clone());VectPentadString.removeAllElements();Mark = (Object)(new String(""));}else if (StPentad.peek()=="Jmp"){VectPentadString.add(Mark);VectPentadString.add(StPentad.pop());VectPentadString.add(StPentad.pop());VectPentadString.add("null");VectPentadString.add("null");VectPentadBlock.add(VectPentadString.clone());VectPentadString.removeAllElements();Mark = (Object)(new String(""));}}VectPentadTotal.add(VectPentadBlock.clone());VectPentadBlock.removeAllElements();VectPentadOp.removeAllElements(); |
Преобразование постфиксной записи в последовательность пентад. |
|||||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.