📄 semantic.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 + -