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

📄 parsell1.h

📁 一个很全的编译器程序,有各种文法的代码,各种方法都分开写的
💻 H
字号:
// parseLL1.h: interface for the CparseLL1 class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARSELL1_H__D80C3A05_26CB_42FF_8FFD_4E36A75BDCBA__INCLUDED_)
#define AFX_PARSELL1_H__D80C3A05_26CB_42FF_8FFD_4E36A75BDCBA__INCLUDED_

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

#include "global.h"

class CparseLL1 : public Cglobal  
{

public:

//用于读token文件:
int fpnum;

//用于语法树的输出:
static int  indentno ;


/*当前单词*/
TokenType  currentToken;
/*当前单词行号,用于给出错误提示信息*/
int  lineno;
/*LL1分析表*/
int LL1Table[TABLESIZE][TABLESIZE];
/*纪录当前语法树节点*/
TreeNode  *currentP;

/*为保存类型需要的临时变量*/
DecKind  *temp;
/*保存当前指针,以便修改后,将其恢复*/
TreeNode  *saveP;

/*纪录表达式中,未匹配的左括号数目*/
int  expflag ;

/*判断简单表达式处理结束,整个表达式是否处理结束标识*/
/*当是条件表达式时,取假值,简单表达式时,取真值*/
/*用于函数preocess84*/
int  getExpResult ; 

/*仅用于数组变量,故初始化为假,遇到数组变量时,将其
  改变为真,以便在函数process84中,即算术表达式结束时,
  从语法树栈中弹出相应指针,将数组下标表达式的结构链入
  节点中*/
int  getExpResult2 ;


/*符号栈顶指针*/
StackNode *StackTop;
/*栈空标志*/
int STACKEMPTY; 

/*语法树栈顶指针*/
StackNodePA  *StackTopPA;
/*栈空标志*/
int  paSTACKEMPTY;

/*操作符栈的栈顶指针*/
StackNodeP  *OpStackTop ;
/*操作符栈空标志*/
int OpSTACKEMPTY ;  

/*操作数栈的栈顶指针*/
StackNodeP  *NumStackTop ;
/*操作数栈空标志*/
int NumSTACKEMPTY ;

public:

	/************语法分析函数******************/
	void CreatLL1Table();
	void gettoken(TokenType *p);
	void syntaxError(char * message);
	void process1();
	void process2();
	void process3();
	void process4();
	void process5();
	void process6();
	void process7();
	void process8();
	void process9();
	void process10();
	void process11();
	void process12();
	void process13();
	void process14();
	void process15();
	void process16();
	void process17();
	void process18();
	void process19();
	void process20();
	void process21();
	void process22();
	void process23();
	void process24();
	void process25();
	void process26();
	void process27();
	void process28();
	void process29();
	void process30();
	void process31();
	void process32();
	void process33();
	void process34();
	void process35();
	void process36();
	void process37();
	void process38();
	void process39();
	void process40();
	void process41();
	void process42();
	void process43();
	void process44();
	void process45();
	void process46();
	void process47();
	void process48();
	void process49();
	void process50();
	void process51();
	void process52();
	void process53();
	void process54();
	void process55();
	void process56();
	void process57();
	void process58();
	void process59();
	void process60();
	void process61();
	void process62();
	void process63();
	void process64();
	void process65();
	void process66();
	void process67();
	void process68();
	void process69();
	void process70();
	void process71();
	void process72();
	void process73();
	void process74();
	void process75();
	void process76();
	void process77();
	void process78();
	void process79();
	void process80();
	void process81();
	void process82();
	void process83();
	void process84();
	void process85();
	void process86();
	void process87();
	void process88();
	void process89();
	void process90();
	void process91();
	void process92();
	void process93();
	void process94();
	void process95();
	void process96();
	void process97();
	void process98();
	void process99();
	void process100();
	void process101();
	void process102();
	void process103();
	void process104();
	void predict(int num);
	int  Priosity( LexType  op);
	TreeNode  * parseLL1();


/***********实用函数***************/
void Push(int i,int j);

void  Pop();

/*读栈顶标志,看是终极符还是非终极符*/
int readStackflag();

/*非终极符时*/
NontmlType readstackN();

/*终极符*/
TmlType readstackT();

/*压栈的实现过程,压入的是指向树节点的指针的地址*/
void  PushPA(TreeNode **t);

/*弹栈的实现过程*/
Cglobal::TreeNode ** PopPA();

/*操作符栈的压栈实现过程,压入的是指向树节点的指针*/
void  PushOp(TreeNode *t);

/*操作符栈的弹栈实现过程*/
Cglobal::TreeNode * PopOp();

LexType ReadOpStack();

/*操作数栈的压栈实现过程,压入的是指向树节点的指针*/
void  PushNum(TreeNode *t);

/*操作数栈的弹栈实现过程*/
TreeNode * PopNum();


TreeNode * newTypeNode();

TreeNode * newVarNode();

TreeNode * newRootNode(void);

TreeNode * newPheadNode(void);

TreeNode * newDecANode(NodeKind kind);

TreeNode * newDecNode(void);

TreeNode * newProcNode(void);

TreeNode * newStmlNode(void);

TreeNode * newStmtNode(StmtKind kind);


TreeNode * newExpNode(ExpKind kind);

void  printTree(TreeNode  *tree);

void printSpaces(void);

char * copyString(char * s);

void  ReadNextToken(TokenType *p);

void printTab(int tabnum);



	CparseLL1();
	virtual ~CparseLL1();

};

#endif // !defined(AFX_PARSELL1_H__D80C3A05_26CB_42FF_8FFD_4E36A75BDCBA__INCLUDED_)

⌨️ 快捷键说明

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