资源简介

这是我自己写的编译原理词法分析程序代码,功能应该比较全,使用是在“test.txt"文本中输入要分析的程序代码段,程序运行后会,会把结果输入不同的文本中,其中“Operator.txt"为运算符,“LimitSign.txt"为界限符...."error.txt"为输入的错误。

资源截图

代码片段和文件信息

#include
#include
#include                   //引入文件流头文件
#include                   //引入特殊字符头文件
#include                   //引入操纵符头文件
using namespace std;
#define MAXBUF 255                 //定义的数组的大小参数
string key[]={“auto““break““continue““char““case““const““class““default““double““do““define““extern“
              “enum““else““friend““float““for““goto““include““int““if““long““namespace““protected“
  “public““private““register““return““static““short““signed““switch““sizeof““struct““typedef“
  “unsigned““union““using““void““while“};  //定义关键字,共40个
char arr[MAXBUF]; //定义的缓冲数组
char temp;
int line=1;       //定义的行
int j=0;          //初始字符数组的下标
int i=0;            //用于全文的变量
class Lex
{
public: 
Lex(){};                                       //Lex初始化构造函数
void Initial();                                //初始化程序  
void Key_Identifier(char chifstream &fin);    //处理关键字和标识符函数
void Operator(char chifstream &fin);          //处理操作符函数
void LimitSign(char chifstream &fin);         //处理界限符函数
void Constant(char chifstream &fin);          //处理常数函数
void Ch_Constant(char chifstream &fin);       //字符常数函数
        void Handle();                                 //开始处理函数
void Output(double nint jchar arr[]);        //输出函数
private:
char ch;
ifstream fin;
ofstream fout;
};
void Lex::Output(double nint jchar arr[])
{
char *temp=new char[j+1];
for(i=0;i temp[i]=arr[i]; //把字符数组赋值给动态的temp字符数组
temp[j]=‘\0‘;
switch((int)n)
{
case 1:fout.open(“KeyWord.txt“ios::app);          //输入到关键字文件夹中
   break;
case 2:fout.open(“Identifier.txt“ios::app);       //输入到标识符文件夹中
   break;
case 3:fout.open(“Constant.txt“ios::app);         //输入到常数文件夹中
   break;
case 4:fout.open(“Operator.txt“ios::app);         //输入到运算符文件夹中
   break;
case 5:fout.open(“LimitSign.txt“ios::app);        //输入到界限符文件夹中
   break;
}
fout< fout.close();
free(temp);
}
void Lex::Key_Identifier(char chifstream &fin)
{
bool keyFlag=true; //设置关键字的标识
int m=0;           //用来控制关键字数组中的开头字母的序号,例如a开头m=0;b开头m=1 
int n=0;           /*用来控制关键字数组中以某个字母开头的关键字数,例如设定的以c开头的关键字共有
                       continuecharcaseconstclass. 5个,则n为5*/
int k;                 
bool flag[40];             //用于监控关键字的标记,因为共设定了40个关键字,则大小也为40
for(i=0;i<40;i++)
flag[i]=true;          //初始时都为true
switch(ch)
{
case ‘a‘:m=0;n=1;break;
case ‘b‘:m=1;n=1;break;
case ‘c‘:m=2;n=5;break;
case ‘d‘:m=7;n=4;break;
case ‘e‘:m=11;n=3;break;
case ‘f‘:m=14;n=3;break;
case ‘g‘:m=17;n=1;break;
case ‘i‘:m=18;n=3;break;
case ‘l‘:m=21;n=1;break;
case ‘n‘:m=22;n=1;break;
case ‘p‘:m=23;n=3;break;
case ‘r‘:m=26;n=2;break;
        case ‘s‘:m=28;n=6;break;
case ‘t‘:m=34;n=1;break;
case ‘u‘:m=35;n=3;break;
case ‘v‘:m=38;n=1;break;
case ‘w‘:m=39;n=1;break;
default:keyFlag=false;break;  //

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         50  2009-05-25 22:39  词法分析\Constant.txt

     文件     598079  2009-05-25 22:39  词法分析\Debug\Lexical.exe

     文件     832768  2009-05-25 22:39  词法分析\Debug\Lexical.ilk

     文件     338516  2009-05-25 22:39  词法分析\Debug\Lexical.obj

     文件    2157048  2009-04-18 22:55  词法分析\Debug\Lexical.pch

     文件    1156096  2009-05-25 22:39  词法分析\Debug\Lexical.pdb

     文件      82944  2009-05-25 22:39  词法分析\Debug\vc60.idb

     文件     118784  2009-05-25 22:39  词法分析\Debug\vc60.pdb

     文件          0  2009-05-25 22:39  词法分析\error.txt

     文件          0  2009-05-25 22:39  词法分析\Identifier.txt

     文件          0  2009-05-25 22:39  词法分析\keyWord.txt

     文件      19768  2009-05-25 22:39  词法分析\Lexical.cpp

     文件       3413  2009-05-25 22:39  词法分析\Lexical.dsp

     文件        522  2009-05-25 22:39  词法分析\Lexical.dsw

     文件      50176  2009-05-25 22:39  词法分析\Lexical.ncb

     文件      48640  2009-05-25 22:39  词法分析\Lexical.opt

     文件        751  2009-05-25 22:39  词法分析\Lexical.plg

     文件         46  2009-05-25 22:39  词法分析\LimitSign.txt

     文件          0  2009-05-25 22:39  词法分析\Operator.txt

     文件         13  2009-05-25 22:39  词法分析\test.txt

     文件       4305  2009-04-18 20:33  词法分析\词法分析.dsp

     文件        524  2009-04-18 19:36  词法分析\词法分析.dsw

     文件      41984  2009-05-25 22:05  词法分析\词法分析.ncb

     文件      48640  2009-05-25 22:05  词法分析\词法分析.opt

     目录          0  2009-05-25 22:40  词法分析\Debug

     目录          0  2009-05-25 22:40  词法分析

----------- ---------  ---------- -----  ----

              5503067                    26


评论

共有 条评论