?? lexdemoview.h
字號:
// lexDemoView.h : interface of the CLexDemoView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_LEXDEMOVIEW_H__7DB84B6A_C098_4A7C_A1BC_C83D54B9C8DF__INCLUDED_)
#define AFX_LEXDEMOVIEW_H__7DB84B6A_C098_4A7C_A1BC_C83D54B9C8DF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Stack.h"
#include "LexUtil.h"
class CLexDemoView : public CView
{
protected: // create from serialization only
CLexDemoView(); DECLARE_DYNCREATE(CLexDemoView)
// Attributes
public:
CLexDemoDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLexDemoView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CLexDemoView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CLexDemoView)
afx_msg void OnFileOpen();
afx_msg void OnLlOne();
afx_msg void OnReversePoland();
afx_msg void OnLrZero();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
Status LexAnal(); //語法分析函數(shù)
private:
Status AddToListForLL(Stack<CString> statusStack); //為LL(1)分析過程在ListBox中添加分析的中間過程
Status AddToListForLR(Stack<CString> statusStack, Stack<CString> symbolStack); //為LR分析過程在ListBox中添加分析的中間結果
Status InitAnalTable(); //分析表構造函數(shù)
Status InitAnalStack(); //初始化分析棧
Status InitStatusStack(Stack<CString> &statusStack); //初始化(LR0)分析棧
Status InitSymbolStack(Stack<CString> &symbolStack); //初始化(LRO)符號棧
Status InitLRTable(LRElem actionTable[], ElemGoto gotoTable[]); ////初始化LR(0)的分析表
Status InitRegTable(Regulation regTable[]);//初始化LR(0)的規(guī)則表
Status InitListBox(); //對顯示語法分析結果的ListBox進行初始化
LRElem LookInActionTable(LRElem actionTable[], CString statusTop, char chInput); //根據(jù)給定的分析表查詢LR(0)的action表獲得下一步的動作
ElemGoto LookInGotoTable(ElemGoto gotoTable[], CString statusTop, CString symbolTop);//根據(jù)給出的goto表查詢下一狀態(tài)
Status GetNextInput(char& valOut); //獲得下一個輸入的字符
Status UnGetInput(); //恢復輸入指針到前一個字符
Status SplitPush(char * szVal);
Status PolandRConvert(CString strSrc, CString& strDst); //進行逆波蘭轉換
Status MakeAsmCode(CString strDst, CString& strOut); //根據(jù)逆逆波蘭式生成匯編碼
LElem FindNextState(char * szTop, char chInput); //根據(jù)當前棧頂元素和輸入元素查分析表取得下一個狀態(tài)動作
bool IsTerminals(CString strVal);
bool IsOperand(char chVal); //判斷字符是否是操作數(shù)
bool IsOperator(char chVal); //判斷字符是否是操作符
int GetPRI(char chVal); //獲得運算符的優(yōu)先級(PRI==Privilege)
Status GetOpCode(char chOp, CString& strCode); //根據(jù)相應的操作符獲得對應的asm code
private:
CEdit m_EditShow;
CListBox m_lstResult; //用于顯示推導過程
CListBox m_lstToken; //用于顯示符號棧中的符號當前所有符號的列表
Stack<CString> m_analStack; //LL(1)分析棧
LElem m_analTable; //LL(1)分析表
char m_szInput[20];
long m_lInputPos; //輸入流指針
};
#ifndef _DEBUG // debug version in lexDemoView.cpp
inline CLexDemoDoc* CLexDemoView::GetDocument()
{ return (CLexDemoDoc*)m_pDocument; }
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_LEXDEMOVIEW_H__7DB84B6A_C098_4A7C_A1BC_C83D54B9C8DF__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -