final Vector VectPentadOp = new Vector(); //вектор для хранения используемых в программе знаков
//операций
final Vector VectPentadMarks = new Vector(); //вектор для хранения имён используемых в
//программе меток
final Stack StPentad = new Stack(); //стек для хранения текущего слова ПФЗ
Ниже приведён программный код алгоритма:
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 (VectPentadMarks.contains(StPentad.peek())==true && (i+1==VectPFRBlock.size() || (i+1<VectPFRBlock.size() && 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();
Последовательность пентад
Блок: 11 |
|||||
Номер |
Метка |
Операция |
Операнд1 |
Операнд2 |
Результат |
0 |
let |
5 |
null |
a1 |
|
1 |
+ |
10.3 |
a |
tmpValue5 |
|
2 |
* |
2 |
tmpValue5 |
tmpValue6 |
|
3 |
let |
tmpValue6 |
null |
b1 |
|
4 |
/ |
a |
b |
tmpValue7 |
|
5 |
let |
tmpValue7 |
null |
c1 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.