📄 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"
//优先矩阵宽度
#define OPERTABLESIZE 8
//产生式最大长度
#define PRODUCTIONLEN 4
//产生式个数
#define PRODUCTIONSIZE 8
//优先矩阵:终结符关系
typedef enum __operator_compare_
{
Unknown=0, //关系未知
Equal =1, //同时规约
Less =2, //后于规约
More =3 //先于规约
}OperCompare;
//分析栈中的终结符指针栈
typedef struct terminal_stack
{
PGSymbol pTerminal; //指向分析栈中终结符
terminal_stack *next; //终结符栈
}*PTerNode,TerNode;
/*//优先矩阵定义顺序
typedef enum __operator_no_
{
Plus =0, //加
Minus =1, //减
Multiply=2, //乘
Divide =3, //除
LBracket=4, //左括号
RBracket=5, //右括号
Operator=6, //终结符
EndMark =7 //结束标志#
}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="");
//进行语法分析
private:
OperCompare CompOperator(char chOper1,char chOper2);
//比较两个终结符的优先级
bool RecogLLP(); //识别素短语,先清空素短语列表
bool MatchProduction(); //匹配当前识别的最左素短语,并进行归约计算表达式的值
// bool Reduce(int iProIndex); //归约当前识别的素短语并将归约结果入栈
void InitStck(); //初始化分析栈
void DisposeStck(); //弹出所有分析栈元素
PGSymbol GSPop(); //弹出分析栈顶元素
PGSymbol GetGSTopSymbol(); //获取分析栈顶元素
PGSymbol GetNextTerSymbol(PGSymbol pGS=NULL);
//获取分析栈最顶部的终结符元素
bool GSPut(char word,PTokenNode pToken);
//压分析栈,终结符
bool GSPut(char word,double dValue);
//压分析栈,非终结符
private:
CMorpheme *m_pMorpheme; //此法分析实例
const char *m_pWordCode[KEYWORDCOUNT+1];
//单词编码指针
static const GProduction m_production[PRODUCTIONSIZE][PRODUCTIONLEN+1];
//文法产生式
static const OperCompare m_operTable[OPERTABLESIZE][OPERTABLESIZE];
//优先矩阵
static const char m_operTableIndex[OPERTABLESIZE];
//优先矩阵符号标示顺序
GSymbol m_stckTop; //分析栈顶部指针
TerNode m_stckTerTop; //分析栈中终结符引用栈顶部指针
GSymbol m_llp; //当前识别的最左素短语
PSTable m_pSymbolTable; //符号表头指针
};
#endif // !defined(AFX_PARSING_H__EC0C180D_6D74_4C4F_8833_D27EC9D96624__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -