⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsing.h

📁 这是用VC6.0开发的集词法分析、语法分析、语义分析为一体的一个程序
💻 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 + -