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

📄 semantic.h

📁 这是用VC6.0开发的集词法分析、语法分析、语义分析为一体的一个程序
💻 H
字号:
// Semantic.h: interface for the CSemantic class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SEMANTIC_H__26CC080F_410F_46D1_9060_FB1152F1F9EE__INCLUDED_)
#define AFX_SEMANTIC_H__26CC080F_410F_46D1_9060_FB1152F1F9EE__INCLUDED_

#include "CommStruct.h"
#include "Morpheme.h"
#include "Parsing.h"

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CSemantic  
{
public:
	CSemantic(const char *pWordCode[],
			  PTokenNode pTokenFile,
			  PSTable pSymbolTable,
			  PFSymbol pFSymbol,
			  PErrorNode pErrorCollection);

	CSemantic(const char *pWordCode[],
			  PTokenNode pTokenFile,
			  PSTable pSymbolTable,
			  PFSymbol pFSymbol,
			  PErrorNode pErrorCollection,
			  CString strSourceFile);

	virtual ~CSemantic();

public:
	void Semantic();									//SIMPLE语法制导翻译程序主控模块。说明翻译用的全称量,文件管理,处理SYNDITER开头与结束工作,直到翻译PROGRAM产生式

private:
	CString m_strSourceFile;							//源程序文件路径
	PSTable m_pSymbolTable;								//符号表头指针
	CMorpheme *m_pMorpheme;								//词法分析实例
	const char *m_pWordCode[KEYWORDCOUNT+1];			//单词编码指针
	PFSymbol m_pCurFS;									//当前要生成的四元式

	bool m_bUseCurToken;								//当前得到的token是否被用
	PTokenNode m_pCurToken;								//当前得到的token

	PFSymbol m_pFSymbol;								//四元式表指针

private:
	void InitPFSymbol();								//初始化四元式链
	void FillTokenType(PTokenNode pToken,const char *type);
														//回填pToken类型
	EOP GetOP(const char *strOp);						//根据操作符返回操作类型
	char *GetOPStr(EOP op);								//根据操作类型返回操作符
	char *GetIDName(PTokenNode pToken);					//获取pToken的标示名称
	void AddError(const char *description);				//添加错误信息
	void NoUseCurToken();								//当前获取的token字没被用
	bool GetNextToken(PTokenNode &pToken);				//获取下一个token字,假则文件分析完毕
	PFSymbol GetCurPFS();								//获取当前要生成的四元式
	PFSymbol Merg(PFSymbol pFS1,PFSymbol pFS2);			//连接两个四元式链
	bool BackPatch(PFSymbol pFS,PFSymbol nextFS);		//将nextFS填入pFS的第四个分量
	PFSAG Ae(PTokenNode pToken);						//翻译<AE>->i+i|i-i
	void Be(PTokenNode pToken,PFSymbol &pTC,PFSymbol &pFC);
														//翻译<BE>-><BT>(or<BE>|e)
	void Bt(PTokenNode pToken,PFSymbol &pTC,PFSymbol &pFC);
														//翻译<BT>-><BF>(and<BT>|e)
	void Bf(PTokenNode pToken,PFSymbol &pTC,PFSymbol &pFC);
														//翻译<BF>->not<BF>
														//		  ->'('<BE>')'
														//		  ->i(rop i|e)
	void Gencode(EOP op,PFSAG ag1,PFSAG ag2,PFSAG result);
														//生成四元式
	void Varst(PTokenNode pToken);						//处理变量说明语句
	void Ids(PTokenNode pToken,PTokenNode stckToken[],int &top);
														//把var语句中的变量表收集到stckToken中暂存,并回送给Varst过程
	void Stl(PTokenNode pToken);						//处理复合语句中的语句串,即匹配产生式<STL>-><S>;<STL>|e,遇到end时返回
	PFSymbol Stsort(PTokenNode pToken);					//处理赋值语句及散转处理各控制语句
	PFSymbol Ifs();										//处理if语句	
};

#endif // !defined(AFX_SEMANTIC_H__26CC080F_410F_46D1_9060_FB1152F1F9EE__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -