资源简介

编译的语法分析程序,有词法的程序包含里面,容易读懂。

资源截图

代码片段和文件信息

/************************************************************************ 
* 文件名:    FenXi.cpp 
* 文件描述:  词法语法分析的实现文件
* 创建人:    程红秀 2005年06月15日 
************************************************************************/ 
//#include “stdafx.h“
#include “fenxi.h“
#include
#include
#include
#include
using namespace std;

/*================================================================ 
* 函数名:    CiFaFenXi
* 功能描述:   词法分析 (public)
* 返回值:    void
================================================================*/
void CFenXi::CiFaFenXi()
{
///*
cout<<“filename:“;
   string filename;
cin>>filename;
ifstream infile;
infile.open(filename.c_str());
int x=0;
while(!infile.eof())
{
infile.get(m_str[x++]);
}
m_str[--x]=‘\0‘;
//*/
bool flag=false;
char token[20];
int kv;

init();

for (int i=0;i delete m_cifa[i];

int n=0; //用于指示当前的字符
m_n=0; //词法结果的个数

while (m_str[n])
{
if (flag)
{
while (!((m_str[n]==‘*‘)&&(m_str[n+1]==‘/‘)))
{
if (m_str[n]) 
n++;
else 
break;
}

if (m_str[n])
{
n++;
n++;
flag=false;
}
}
while (1)
{
while ((m_str[n]==32) || (m_str[n]==9))
n++;

if (!((m_str[n]==13) && (m_str[n+1]==10)))
break;

n++;
n++;
}


if (isalpha(m_str[n])) //字母
{
k=0;
while (1)
{
if (k<19) //标志符的长度为20
token[k++]=m_str[n++];
else 
n++;

if (!isalnum(m_str[n])) //如果不是数字或字母就退出
break;
}

token[k]=0;
v=FindInKWTab(token); //查找关键词表
if (v) //如果是关键词
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szTexttoken);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
else   //普通标志符
{
m_cifa[m_n]=new CIFA;

    /*----------在词法分析结果中查找-----------*/
int vv=1;
for (int i=0;i {
if (m_cifa[i]->nType==1)
{
vv++;
if (!::stricmp(m_cifa[i]->szTexttoken))
m_cifa[m_n]->nValue= m_cifa[i]->nValue;
}
}
m_cifa[m_n]->nValue=vv;
    /*---------------------------------------*/

m_cifa[m_n]->nType=1;
strcpy(m_cifa[m_n]->szTexttoken);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
}
else if (isdigit(m_str[n])) //数字
{
k=0;
bool error=false;
while (1)
{
if (k<=8) 
token[k++]=m_str[n++];
else
{
error=true;
n++;
}
if (!isdigit(m_str[n])) 
break;
}
token[k]=0;
v=::strtol(tokenNULL10);
if (error)
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=1;
m_cifa[m_n]->nType=0;
strcpy(m_cifa[m_n]->szTexttoken);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
else
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=v;
m_cifa[m_n]->nType=2;
strcpy(m_cifa[m_n]->szTexttoken);

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

     文件      29889  2009-05-15 11:43  赋值\beifen.cpp

     文件     573528  2009-05-19 12:37  赋值\Debug\FenXi.exe

     文件     818560  2009-05-19 12:37  赋值\Debug\FenXi.ilk

     文件     298607  2009-05-19 12:37  赋值\Debug\FenXi.obj

    .CA....   2081936  2009-05-15 10:11  赋值\Debug\FenXi.pch

     文件    1147904  2009-05-19 12:37  赋值\Debug\FenXi.pdb

     文件      82944  2009-05-19 12:38  赋值\Debug\vc60.idb

     文件     110592  2009-05-19 12:37  赋值\Debug\vc60.pdb

     文件      12692  2009-05-19 12:39  赋值\FenXi.cpp

     文件       3389  2009-05-19 12:38  赋值\FenXi.dsp

     文件        518  2009-05-19 12:38  赋值\FenXi.dsw

     文件       1926  2005-06-15 11:06  赋值\FenXi.h

     文件      41984  2009-05-19 12:38  赋值\FenXi.ncb

     文件      48640  2009-05-19 12:38  赋值\FenXi.opt

     文件        244  2009-05-19 12:38  赋值\FenXi.plg

     文件         13  2009-05-19 12:32  赋值\in.txt

     目录          0  2009-05-19 12:37  赋值\Debug

     目录          0  2009-05-20 12:22  赋值

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

              5253366                    18


评论

共有 条评论