?? parsing.h
字號:
// Parsing.h: interface for the CParsing class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PARSING_H__EC0C180D_6D74_4C4F_8833_D27EC9D96624__INCLUDED_)
#define AFX_PARSING_H__EC0C180D_6D74_4C4F_8833_D27EC9D96624__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CommStruct.h"
#include "Morpheme.h"
//優(yōu)先矩陣寬度
#define OPERTABLESIZE 8
//產(chǎn)生式最大長度
#define PRODUCTIONLEN 4
//產(chǎn)生式個數(shù)
#define PRODUCTIONSIZE 8
//優(yōu)先矩陣:終結(jié)符關(guān)系
typedef enum __operator_compare_
{
Unknown=0, //關(guān)系未知
Equal =1, //同時規(guī)約
Less =2, //后于規(guī)約
More =3 //先于規(guī)約
}OperCompare;
//分析棧中的終結(jié)符指針棧
typedef struct terminal_stack
{
PGSymbol pTerminal; //指向分析棧中終結(jié)符
terminal_stack *next; //終結(jié)符棧
}*PTerNode,TerNode;
/*//優(yōu)先矩陣定義順序
typedef enum __operator_no_
{
Plus =0, //加
Minus =1, //減
Multiply=2, //乘
Divide =3, //除
LBracket=4, //左括號
RBracket=5, //右括號
Operator=6, //終結(jié)符
EndMark =7 //結(jié)束標(biāo)志#
}OperNo;*/
class CParsing
{
public:
CParsing(const char *pWordCode[],
PTokenNode pTokenFile,
PSTable pSymbolTable,
PErrorNode pErrorCollection);
CParsing(const char *pWordCode[],
PTokenNode pTokenFile,
PSTable pSymbolTable,
PErrorNode pErrorCollection,
CString strSourceFile);
virtual ~CParsing();
public:
CString Parsing(CString strSourceFile="");
//進(jìn)行語法分析
private:
OperCompare CompOperator(char chOper1,char chOper2);
//比較兩個終結(jié)符的優(yōu)先級
bool RecogLLP(); //識別素短語,先清空素短語列表
bool MatchProduction(); //匹配當(dāng)前識別的最左素短語,并進(jìn)行歸約計算表達(dá)式的值
// bool Reduce(int iProIndex); //歸約當(dāng)前識別的素短語并將歸約結(jié)果入棧
void InitStck(); //初始化分析棧
void DisposeStck(); //彈出所有分析棧元素
PGSymbol GSPop(); //彈出分析棧頂元素
PGSymbol GetGSTopSymbol(); //獲取分析棧頂元素
PGSymbol GetNextTerSymbol(PGSymbol pGS=NULL);
//獲取分析棧最頂部的終結(jié)符元素
bool GSPut(char word,PTokenNode pToken);
//壓分析棧,終結(jié)符
bool GSPut(char word,double dValue);
//壓分析棧,非終結(jié)符
private:
CMorpheme *m_pMorpheme; //此法分析實例
const char *m_pWordCode[KEYWORDCOUNT+1];
//單詞編碼指針
static const GProduction m_production[PRODUCTIONSIZE][PRODUCTIONLEN+1];
//文法產(chǎn)生式
static const OperCompare m_operTable[OPERTABLESIZE][OPERTABLESIZE];
//優(yōu)先矩陣
static const char m_operTableIndex[OPERTABLESIZE];
//優(yōu)先矩陣符號標(biāo)示順序
GSymbol m_stckTop; //分析棧頂部指針
TerNode m_stckTerTop; //分析棧中終結(jié)符引用棧頂部指針
GSymbol m_llp; //當(dāng)前識別的最左素短語
PSTable m_pSymbolTable; //符號表頭指針
};
#endif // !defined(AFX_PARSING_H__EC0C180D_6D74_4C4F_8833_D27EC9D96624__INCLUDED_)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -