CString CAnalyzeDlg::GetStepInfo(int iStep, const vector<int> & Status, const vector<char> & Symbol, CString sInput, Pair Action, int Goto) { CString rtn; rtn.Format("<tr><td nowrap> %d </td>\n",iStep); CString t2 = ""; CString t; int nCount = 0; for (int i = 0; i < Status.size(); i++) { if (nCount % 2) t.Format("%d", Status[i]); else t.Format("<u>%d</U>", Status[i]); t2 += t; nCount++; } rtn = rtn + "<td nowrap> " + t2 + " </td>\n<td nowrap> "; t2 = ""; for(i = 0; i < Symbol.size(); i++) { t.Format("%c", Symbol[i]); t2 += t; } rtn = rtn + t2 + " </td>\n"; rtn = rtn + "<td nowrap> " + sInput + " </td>\n"; if (Action.one != 'a') t2.Format("%c<font size=\"1\">%d</font>", Action.one, Action.two); else t2 = "acc"; rtn = rtn + "<td nowrap> " + t2 + " </td>\n"; if (Goto == -1) rtn += "<td nowrap> </td>\n"; else { t2.Format("<td nowrap> %d </td>\n", Goto); rtn += t2; } rtn += "</tr>\n"; return rtn; }代码超详细介绍
时间: 2023-06-25 17:07:49 浏览: 70
这段代码是在 CAnalyzeDlg 类中定义的 GetStepInfo 函数,主要用于生成语法分析器的分析表。函数接受五个参数:
1. iStep:当前步骤的编号。
2. Status:当前状态。
3. Symbol:当前输入符号。
4. sInput:剩余输入串。
5. Action:当前动作。
6. Goto:下一个状态。
函数返回一个 CString 类型的字符串,其中包含了当前步骤的信息,用于在界面上显示。
具体实现:
1. 创建 rtn 变量,用于存储函数返回结果。
2. 使用 Format 函数将当前步骤编号添加到 rtn 字符串中。
3. 创建 t2 变量,用于存储当前状态的 HTML 格式字符串。
4. 遍历 Status 数组,根据当前数组索引的奇偶性,将当前状态以不同的格式添加到 t2 变量中。
5. 将 t2 字符串添加到 rtn 字符串中。
6. 创建 t 变量,用于存储当前输入符号的 HTML 格式字符串。
7. 遍历 Symbol 数组,将每个输入符号以单个字符的形式添加到 t 变量中。
8. 将 t 变量添加到 rtn 字符串中。
9. 将剩余输入串 sInput 添加到 rtn 字符串中。
10. 如果当前动作不是接受动作,则将当前动作以 HTML 格式字符串的形式添加到 t2 变量中;否则将字符串 "acc" 添加到 t2 变量中。
11. 将 t2 变量添加到 rtn 字符串中。
12. 如果下一个状态是 -1,则在 rtn 字符串中添加空格;否则将下一个状态以 HTML 格式字符串的形式添加到 rtn 字符串中。
13. 在 rtn 字符串末尾添加 HTML 标签,返回 rtn 字符串。
总之,这段代码是用于生成语法分析表的 HTML 格式字符串,方便在用户界面上展示。
阅读全文