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