📄 pl.cpp
字号:
// PL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PL.h"
#include "Compiler.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
const char strSyntaxErrTip[][70]=
{
"非法字符", //0
"程序必须以关键字Program开头", //1
"定义程序名的变量名后必须以分号结束", //2
"定义程序名的变量名的第一个字符必须为字母", //3
"定义程序名的变量名的中间字符或为字母或为数字", //4
"遇到意外的文件结束:关键字Program后应有程序名,分号和程序块", //5
"遇到意外的文件结束:程序名后必须有分号和程序块", //6
"遇到意外的文件结束:程序必须有程序块", //7
"定义常量时必须以关键字Const开头", //8
"遇到意外的文件结束:关键字Const后面必须有变量名", //9
"定义常量的变量名的第一个字符必须为字母", //10
"遇到意外的文件结束:必须给常量赋值", //11
"常量赋值符号应为“:=”", //12
"遇到意外的文件结束:常量赋值符号“:=”后应有常量", //13
"Const定义的常量应为整数", //14
"遇到意外的文件结束:定义常量时,“,”后面应该有变量", //15
"遇到意外的文件结束:程序必须有程序体", //16
"遇到意外的文件结束:关键字Var后面必须有变量名", //17
"定义变量的变量名的第一个字符必须为字母", //18
"定义变量的变量名的中间字符或为字母或为数字", //19
"遇到意外的文件结束:定义变量还未结束,“,”后必须有变量", //20
"定义过程名的变量名的第一个字符必须为字母", //21
"定义过程名的变量名的中间字符或为字母或为数字", //22
"遇到意外的文件结束:关键字Procedure后面必须有过程名", //23
"定义过程名后必须加“(”", //24
"写完过程参数后必须加“)”", //25
"遇到意外的文件结束:过程名后无括号和参数", //26
"遇到意外的文件结束:过程名后无参数", //27
"定义过程参数的变量名的第一个字符必须为字母", //28
"定义过程参数的变量名的中间字符或为字母或为数字", //29
"遇到意外的文件结束:过程参数后应有“)”", //30
"定义完过程后必须以分号结束", //31
"遇到意外的文件结束:过程参数还未写完", //32
"遇到意外的文件结束:定义完过程后必须以分号结束", //33
"遇到意外的文件结束:过程无块", //34
"遇到意外的文件结束:另一个过程还未定义", //35
"程序体必须以关键字Begin开头", //36
"遇到意外的文件结束:程序体无语句", //37
"遇到意外的文件结束:程序体应该以关键字End结束", //38
"遇到意外的文件结束:语句后面的分号后面应该还有语句", //39
"程序体应该以关键字End结束", //40
"遇到意外的文件结束:赋值语句没有赋值符号与表达式", //41
"赋值符号应为:=", //42
"遇到意外的文件结束:赋值语句没有表达式", //43
"遇到意外的文件结束:if语句后没有表达式,关键字then和表达式", //44
"if语句没有关键字then", //45
"遇到意外的文件结束:if语句后没有关键字then和表达式", //46
"遇到意外的文件结束:if语句的关键字then后没有表达式", //47
"遇到意外的文件结束:if语句的关键字else后面没有表达式", //48
"遇到意外的文件结束:While语句后没有表达式,关键字Do和语句", //49
"遇到意外的文件结束:While语句后没有关键字do和语句", //50
"while语句没有关键字Do", //51
"遇到意外的文件结束:While语句后没有关键字Do", //52
"遇到意外的文件结束:Call语句后过程名", //53
"关键字Call所调用的过程名的第一个字符必须为字母", //54
"关键字Call所调用的过程名的中间字符或为字母或为数字", //55
"遇到意外的文件结束:Call语句后无表达式", //56
"遇到意外的文件结束:Call语句调用过程时'('后面必须有表达式和')'", //57
"遇到意外的文件结束:Call语句调用过程时后面必须有')'", //58
"Call语句调用过程时后面必须有')'", //59
"遇到意外的文件结束:Read语句后无'('和变量和')'", //60
"Read语句后没有'('", //61
"遇到意外的文件结束:Read语句后无变量和')'", //62
"关键字Read后的变量的第一个字符必须为字母", //63
"关键字Read后的变量的中间字符或为字母或为数字", //64
"遇到意外的文件结束:Read语句无')'", //65
"Read语句没有')'", //66
"遇到意外的文件结束:Read语句中逗号','后无变量", //67
"遇到意外的文件结束:write语句后无'(',表达式和')'", //68
"Write语句没有'('", //69
"遇到意外的文件结束:Write语句后无表达式和')'", //70
"遇到意外的文件结束:Write语句后无')'", //71
"Write语句后没有')'", //72
"遇到意外的文件结束:Write语句中逗号','后无变量", //73
"关键字Write后的变量的第一个字符必须为字母", //74
"关键字Write后的变量的中间字符或为字母或为数字", //75
"遇到意外的文件结束:因子无'(',表达式和')'", //76
"因子后没有')'", //77
"遇到意外的文件结束:表达式后无项", //78
"遇到意外的文件结束:表达式中'+'或'-'后无项", //79
"遇到意外的文件结束:表达式后应有运算符和表达式", //80
"表达式之间无运算符号", //81
"遇到意外的文件结束:关键字Odd应有表达式", //82
"遇到意外的文件结束:项无'(',表达式和')'", //83
"多余的文件尾-程序以程序块结束,程序块后面不应再有程序", //84
"遇到意外的文件结束:源文件为空文件", //85
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
if(argc==1)
{
cout<<"\r\n------ 无源文件 ------";
return nRetCode;
}
CCompiler compiler;
vector<SYNTAXERR> vectorSETemp;
int nSize;
int i;
cout<<"-------- 已启动生成 --------\n\n";
cout<<"正在编译...\n\n";
cout<<argv[1]<<"\n\n";
compiler.Compile(argv[1]);
vectorSETemp=compiler.GetSyntaxErr();
nSize=vectorSETemp.size();
if(!nSize)//无错误
cout<<argv[1]<<" - 0 错误\n\n\n------------- 完成 -------------\n\n生成: 1 已成功, 0 已失败, 0 已跳过";
else
{
for(i=0;i<nSize;i++)
printf("错误%d:%s\n\n",i+1,strSyntaxErrTip[vectorSETemp[i].iSyntaxErrCode]);
printf("\n%s - %d 错误\n\n\n------------- 完成 -------------\n\n生成: 0 已成功, 1 已失败, 0 已跳过",argv[1],nSize);
}
return nRetCode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -