📄 main.cpp
字号:
/****************************************************/
/* 文件 main.cpp */
/* 说明 类PASCAL语言编译器主程序 */
/* 主题 编译器结构:原理和实例 */
/****************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h" /* 用到了该库中的isalnum,isalpha,isdigit函数 */
#include "math.h" /* 用到了这个库里的取模运算 */
#include "iostream.h"
/* 头文件globals.h定义了全局类型与变量 */
#include "globals.h"
/*头文件compiler.h定义了编译类*/
#include "compiler.h"
/*头文件func.h定义了静态函数类*/
#include "func.h" //提供函数库的静态类
#include "userfun.h" //提供用户函数库的静态类
/********************************************************/
/* 函数名 main */
/* 功 能 函数将编译程序中各个功能部分有机结合在一起, */
/* 完成用户需要的编译工作,输出相关信息和结果 */
/********************************************************/
char lineBuf[BUFLEN];
int linepos = 0;
int bufsize = 0;
int EOF_flag = FALSE;
int Tokennum=0;
int lineno=0;
int EchoSource=TRUE;
int TraceScan=TRUE;
int Error=FALSE;
int main( )
{
FILE * source; //源文件的打开指针
/*输入要编译的文件名*/
char filename[120];
/*目标代码文件名*/
cout<<"input program names:"<<endl;
cin>>filename;
//char * root=userfun::getRoot(filename);
/* 用只读方式打开源程序文件pgm,文件指针给source */
source = fopen(filename,"r");
if (source==NULL)
{
fprintf(stderr,"File %s not found\n",filename);
return 1;
}
compiler p;
/* 调用词法分析函数,得到Token序列*/
ChainNodeType * tokenlist=p.getTokenlist(source);
cout<<"Lexical analysizing:"<<endl;
cout<<"token list:"<<endl;
userfun::printTokenlist(tokenlist);
//userfun::ChainToFile(tokenlist,root);
cout<<endl;
getchar();
getchar();
/* 调用语法分析函数,得到语法树序列*/
treeNode * progTree=p.getTree();
userfun::printTree(progTree);
getchar();
getchar();
SymbTable **scope=p.getScope();
userfun::PrintSymbTable(scope);
getchar();
getchar();
userfun::printTree(progTree);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -