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

代码片段和文件信息
/************************************************************************
* 文件名: 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
- 上一篇:主成分分析的过程及加强鲁棒性方法
- 下一篇:小波变换分析故障振动信号
相关资源
- 易语言编译原理 易语言循环首尾配对
- 原创:AnyExe2Swf flash exe文件还原、反
- 终于解决了 Delphi XE 编译生成的EXE文件
- 微软masm汇编编译器
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- unity3d反编译工具
- 汇编语言编译器masm5.0
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译词法分析器识别关键字常数和符
- uCOS编译环境建立 BC45 TASM
- zlib 最新 1.2.8 win32 win64 编译好的dll
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- C编译器源代码(超级牛b).rar
- Delphi反编译工具的源码
- 小程序反编译文件wxappUnpacker.rar
- win10 64位下编译的opencv4.5.5库,opencv
- 易语言模块反编译助手
- librdkafka win7 64位 vs2015编译Release版本
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- delphi 反编译工具 源码
- 编译好的json_lib.lib 包含64位,32位,头
- frcc.exe fastreport编译中文没乱码
评论
共有 条评论