void polizFor(Node[] masTableLexAnalysis) { try { List listA = new List(); Stack listM = new Stack(); string id = getWord(masTableLexAnalysis[g + 1]); for (int i = g; g < masTableLexAnalysis.Length; g++) { string word = getWord(masTableLexAnalysis[g]); if (word == "for") { g++; polizAssigned(masTableLexAnalysis); } else if (word == "to") { listA.add(Convert.ToString(countWordPoliz + 1)); g++; polizArifTerm(masTableLexAnalysis); m++; listM.push("M" + m); resultsPolizString += "M" + m + " !F "; countWordPoliz += 2; } else if (word == "do") { g++; whatOperatorForPoliz(masTableLexAnalysis); m++; resultsPolizString += id + " " + id + " " + "1 + := " + "M" + m + " ! "; countWordPoliz += 7; listM.push("M" + m); } else if (word == ";") break; } listA.add(Convert.ToString(countWordPoliz)); LabelList.add(listM.pop(), listA.pop()); LabelList.add(listM.pop(), listA.pop()); } catch { errorsTextBox.Text = "Возникла неизвестная ошибка при выполнении перевода в полиз"; } }
void polizWhile(Node[] masTableLexAnalysis) { try { List listA = new List(); Stack listM = new Stack(); for (int i = g; g < masTableLexAnalysis.Length; g++) { string word = getWord(masTableLexAnalysis[g]); if (word == "do") { listA.add(Convert.ToString(countWordPoliz + 1)); polizLogTerm(masTableLexAnalysis, g + 2); m++; listM.push("M" + m); resultsPolizString += "M" + m + " !F "; countWordPoliz+=2; g++; whatOperatorForPoliz(masTableLexAnalysis); m++; listM.push("M" + m); resultsPolizString += "M" + m + " ! "; countWordPoliz += 2; listA.add(Convert.ToString(countWordPoliz + 1)); } else if (word == "loop") { g++; break; } } LabelList.add(listM.pop(), listA.pop()); LabelList.add(listM.pop(), listA.pop()); } catch { errorsTextBox.Text = "Возникла неизвестная ошибка при выполнении перевода в полиз"; } }
void polizIf(Node[] masTableLexAnalysis) { try { bool flagElse = false; List listM = new List(); List listA = new List(); for (int i = g; g < masTableLexAnalysis.Length; g++) { string word = getWord(masTableLexAnalysis[g + 1]); if (word == "(") { polizLogTerm(masTableLexAnalysis, g + 1); m++; listM.add("M" + m); resultsPolizString += "M" + m + " !F "; countWordPoliz += 2; g++; whatOperatorForPoliz(masTableLexAnalysis); if (getWord(masTableLexAnalysis[g + 1]) == "else") { listA.add(Convert.ToString(countWordPoliz + 2)); flagElse = true; } else listA.add(Convert.ToString(countWordPoliz + 1)); g = g - 1; } else if (word == ",") { g += 2; whatOperatorForPoliz(masTableLexAnalysis); g = g - 1; } else if (word == "else") { g += 2; m++; listM.add("M" + m); resultsPolizString += "M" + m + " ! "; countWordPoliz += 2; whatOperatorForPoliz(masTableLexAnalysis); listA.add(Convert.ToString(countWordPoliz - 3)); break; } else if (word == ";") break; } if (flagElse == true) { LabelList.add(listM.pop(), listA.pop()); LabelList.add(listM.pop(), listA.pop()); } else LabelList.add(listM.pop(), listA.pop()); } catch { errorsTextBox.Text = "Возникла неизвестная ошибка при выполнении перевода в полиз"; } }