📄 func.h
字号:
/*静态函数类文件,定义静态函数类*/
#include "globals.h" /* 该头文件globals.h定义了全局类与变量 */
#ifndef _FUNC_H_
#define _FUNC_H_
/*词法分析*/
class scanner
{
public:
static int getNextChar(FILE *source);
static void ungetNextChar(void);
static LexType reservedLookup (char * s);
};
/*语法分析*/
// ChainNodeType * currentP; //词法分析结果:Token链表的头指针
class Syntax
{
private:
TokenType token; //记录当前读入的token
char * temp_name;
int line0;
// int token_num; /*输出时记录token个数的变量*/
ChainNodeType * currentP; //词法分析结果:Token链表的头指针
public:
/*返回成员变量的值*/
TokenType getToken();
char * getTemp_name();
int getLine0();
void setCurrentP(ChainNodeType * tokenl); //获得词法分析的结果的链表头指针
void syntaxError(char * message); //语法错误处理函数
void match(LexType expected); //终极符匹配处理函数
char * copyString(char * s); //字符串复制函数
void ReadNextToken(); //读入到当前token
/********************************************************
*********以下是创建语法树所用的各类节点的申请***********
********************************************************/
TreeNode * newRootNode(void);
TreeNode * newPheadNode(void);
TreeNode * newDecANode(NodeKind kind);
TreeNode * newTypeNode();
TreeNode * newVarNode();
TreeNode * newDecNode(void);
TreeNode * newProcNode(void);
TreeNode * newStmlNode(void);
TreeNode * newStmtNode(StmtKind kind);
TreeNode * newExpNode(ExpKind kind);
/********** 递归调用的成员函数原型 ************/
TreeNode * program(void);
TreeNode * programHead(void);
TreeNode * declarePart(void);
TreeNode * typeDec(void);
TreeNode * typeDeclaration(void);
TreeNode * typeDecList(void);
TreeNode * typeDecMore(void);
void typeId(TreeNode * t);
void typeName(TreeNode * t);
void baseType(TreeNode * t);
void structureType(TreeNode * t);
void arrayType(TreeNode * t);
void recType(TreeNode * t);
TreeNode * fieldDecList(void);
TreeNode * fieldDecMore(void);
void idList(TreeNode * t);
void idMore(TreeNode * t);
TreeNode * varDec(void);
TreeNode * varDeclaration(void);
TreeNode * varDecList(void);
TreeNode * varDecMore(void);
void varIdList(TreeNode * t);
void varIdMore(TreeNode * t);
TreeNode * procDec(void);
TreeNode * procDeclaration(void);
void paramList(TreeNode * t);
TreeNode * paramDecList(void);
TreeNode * param(void);
TreeNode * paramMore(void);
void formList(TreeNode * t);
void fidMore(TreeNode * t);
TreeNode * procDecPart(void);
TreeNode * procBody(void);
TreeNode * programBody(void);
TreeNode * stmList(void);
TreeNode * stmMore(void);
TreeNode * stm(void);
TreeNode * assCall(void);
TreeNode * assignmentRest(void);
TreeNode * conditionalStm(void);
TreeNode * loopStm(void);
TreeNode * inputStm(void);
TreeNode * outputStm(void);
TreeNode * returnStm(void);
TreeNode * callStmRest(void);
TreeNode * actParamList(void);
TreeNode * actParamMore(void);
TreeNode * exp(void); /* 处理表达式函数 */
TreeNode * simple_exp(void); /* 处理简单表达式函数 */
TreeNode * term(void); /* 处理项函数 */
TreeNode * factor(void); /* 处理因子函数 */
TreeNode * variable(void);
void variMore(TreeNode * t);
TreeNode * fieldvar(void);
void fieldvarMore(TreeNode * t );
};
//语义分析函数类
class SemAnalyze
{
private:
/*在同层的变量偏移*/
int Off;
/*主程序的noff偏移*/
int mainOff;
SymbTable * scope[SCOPESIZE]; /*scope栈*/
public:
/*-----------------语义分析功能函数---------------------------*/
SymbTable **returnScope();
void initialize(void);
TypeIR * TypeProcess(TreeNode * t,DecKind deckind);
TypeIR * nameType(TreeNode * t);
TypeIR * arrayType(TreeNode * t);
TypeIR * recordType(TreeNode * t);
void TypeDecPart(TreeNode * t);
void VarDecPart(TreeNode * t);
void varDecList(TreeNode * t);
void procDecPart(TreeNode * t);
SymbTable * HeadProcess(TreeNode * t);
ParamTable * ParaDecList(TreeNode * t) ;
void Body(TreeNode * t);
void statement (TreeNode * t);
TypeIR * Expr(TreeNode * t,AccessKind * Ekind);
TypeIR * arrayVar(TreeNode * t);
TypeIR * recordVar(TreeNode * t);
void assignstatement(TreeNode * t);
void callstatement(TreeNode * t);
void ifstatment(TreeNode * t );
void whilestatement(TreeNode * t);
void readstatement (TreeNode * t);
void writestatement(TreeNode * t );
void returnstatement(TreeNode * t );
/*-----------------管理符号表功能函数---------------------------*/
SymbTable * NewTable(void);
void CreatTable(void);
void DestroyTable(void);
int Enter(char * id,AttributeIR * attribP,SymbTable ** entry);
int FindEntry(char * id,SymbTable ** entry);
AttributeIR FindAttr(SymbTable * entry);
int Compat(TypeIR * tp1,TypeIR * tp2);
TypeIR * NewTy(TypeKind kind);
fieldChain * NewBody(void);
ParamTable * NewParam(void);
void ErrorPrompt(int line,char * name,char * message);
bool FindField(char * Id , fieldChain *head,fieldChain **Entry );
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -