class CAnalyzeDlg : public CResizingDialog { // Construction public: CString GetStepInfo(int iStep, const vector <int> & Status, const vector <char> & Symbol, CString sInput, Pair Action, int Goto); CAnalyzeDlg(CWnd* pParent = NULL); // standard constructor ~CAnalyzeDlg(); void SetGrammar(const Grammar & g); // Dialog Data //{{AFX_DATA(CAnalyzeDlg) enum { IDD = IDD_DIALOG2 }; CEdit m_edit1; CExplorer1 m_web; CString m_input; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAnalyzeDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: Grammar m_g; CTreeDlg * m_pTree; string m_strTempFilename; // Generated message map functions //{{AFX_MSG(CAnalyzeDlg) virtual void OnOK(); virtual void OnCancel(); afx_msg void OnButton1(); virtual BOOL OnInitDialog(); afx_msg void OnButton2(); afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: void MakeTree(); stack <int> TreeStack; };代码详细介绍
时间: 2023-06-26 11:05:10 浏览: 121
这是一个 MFC 对话框类 CAnalyzeDlg,继承自 CResizingDialog。其中包含了以下成员函数:
- GetStepInfo:根据当前分析步骤的状态、符号、输入、动作以及 Goto 表信息,构造一个分析步骤的信息字符串。
- SetGrammar:设置语法规则。
- OnOK、OnCancel:处理对话框的 OK 和 Cancel 按钮消息。
- OnInitDialog:初始化对话框。
- OnButton1、OnButton2:处理对话框中的两个按钮消息。
- OnActivate:处理对话框激活消息。
此外,该类还包含了以下成员变量:
- m_g:语法规则。
- m_pTree:指向语法分析树对话框的指针。
- m_strTempFilename:临时文件名。
- TreeStack:用于构造语法分析树的栈。
相关问题
class CAnalyzeDlg : public CResizingDialog { // Construction public: CString GetStepInfo(int iStep, const vector <int> & Status, const vector <char> & Symbol, CString sInput, Pair Action, int Goto); CAnalyzeDlg(CWnd* pParent = NULL); // standard constructor ~CAnalyzeDlg(); void SetGrammar(const Grammar & g); // Dialog Data //{{AFX_DATA(CAnalyzeDlg) enum { IDD = IDD_DIALOG2 }; CEdit m_edit1; CExplorer1 m_web; CString m_input; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAnalyzeDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: Grammar m_g; CTreeDlg * m_pTree; string m_strTempFilename; // Generated message map functions //{{AFX_MSG(CAnalyzeDlg) virtual void OnOK(); virtual void OnCancel(); afx_msg void OnButton1(); virtual BOOL OnInitDialog(); afx_msg void OnButton2(); afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: void MakeTree(); stack <int> TreeStack; };代码解释
这是 MFC 中一个用于语法分析的对话框类 CAnalyzeDlg 的定义。它继承自 CResizingDialog 类,具有自适应大小的特性。其中包含了成员函数 GetStepInfo、SetGrammar、MakeTree 等。GetStepInfo 用于获取语法分析过程中每一步的信息,SetGrammar 用于设置语法分析所使用的文法,MakeTree 用于生成分析树。在对话框上,包含了一个编辑框和一个 CExplorer1 控件,用于显示分析结果和分析树。
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; }代解释
这是一个 MFC 对话框程序中的函数,用于获取语法分析过程中每个步骤的信息并以 HTML 表格形式返回。函数的参数包括:
- iStep:当前步骤的编号
- Status:状态栈中的状态序列,其中某些状态被加下划线表示
- Symbol:符号栈中的符号序列
- sInput:输入串
- Action:当前动作,包括一个字符和一个整数,如果字符为 'a' 则表示接受
- Goto:跳转到的状态编号,如果为 -1 则表示不需要跳转
函数返回一个 CString 类型的字符串,包含 HTML 表格的一行信息,其中包括每个步骤的编号、状态栈序列、符号栈序列、输入串、当前动作和跳转到的状态编号等信息。
阅读全文