资源简介
编译原理作业,用C++实现了词法分析、语法分析以及四元式的生成
![](http://www.nz998.com/pic/38824.jpg)
代码片段和文件信息
#include“cifa.h“
#define N 100
string Reservedword[] = {“program““begin““end““var““integer““real““while““if““then““else““do“};
string Identifier[N];
void change(char* str) //将line中的大写字母转换成小写便于分析
{
for(int i=0;i if(str[i]>=‘A‘&&str[i]<=‘Z‘)
str[i]+=32;
}
int isReservedword(string str) //判断保留字,并返回编号,不是保留字则返回-1
{
int i=0;
for(i=0;i<11;i++)
{
if(!str.compare(Reservedword[i]))
return i+1;
}
return -1;
}
int isIdentifier(string strint count) //判断已知标识符,并返回编号,不是保留字则返回-1
{
int i=0;
for(i=0;i {
if(!str.compare(Identifier[i]))
return i+1;
}
return -1;
}
void addIdentifier(string strint count) //添加标识符
{
Identifier[count]=str;
}
void LexicAlanalysis(fstream & infilefstream & outfile)
{
char line[180];
char str[180];
int count = 0flag = 1; //count记录标识符的个数 flag判断是不是注释
while(infile>>line) //读取一个字符串
{
int ijk;
change(line);
for(i=0;i {
if(flag==0&&line[i]!=‘*‘) {i++;continue;}
if(line[i]>=‘a‘&&line[i]<=‘z‘)
{
j=i;k=0;
while((line[j]>=‘0‘&&line[j]<=‘9‘)||(line[j]>=‘a‘&&line[j]<=‘z‘))
str[k++]=line[j++];
str[k]=NULL;
if(k>0)
{
if(isReservedword(str)>=0) //保留字
{
outfile<<“(3“< i+=strlen(str);
continue;
}
if(isIdentifier(strcount)>=0) //标识符
{
outfile<<“(4“< i+=strlen(str);
continue;
}
else
{
addIdentifier(strcount);
count++;
outfile<<“(4“< i+=strlen(str);
continue;
}
}
}
j=i; k=0; //数字
while((line[j]>=‘0‘&&line[j]<=‘9‘)||line[j]==‘.‘)
str[k++]=line[j++];
str[k]=NULL;
if(str[0]==‘.‘&&str[1]==NULL)
{outfile<<“(8.)“< else if(k>0)
{
outfile<<“(5“< i+=strlen(str);
continue;
}
if(line[i]==‘;‘)
{outfile<<“(6;)“< if(line[i]==‘‘)
{outfile<<“(7)“< if(line[i]==‘:‘)
{
if(line[i+1]!=NULL&&line[i+1]==‘=‘)
{outfile<<“(10:=)“< else
{outfile<<“(9:)“< }
if(line[i]==‘+‘)
{outfile<<“(11+)“< if(line[i]==‘-‘)
{outfile<<“(12-)“< if(line[i]==‘*‘)
{
if(line[i+1]!=NULL&&line[i+1]==‘/‘&&flag==0) //处理‘*/‘
{flag=1;i+=2;continue;}
else if(flag==1)
{outfile<<“(13*)“< else
{i++;continue;}
}
if(line[i]==‘/‘)
{
if(line[i+1]!=NULL&&line[i+1]==‘/‘)
{infile.getline(line180);break;}
else if(line[i+1]!=NULL&&line[i+1]==‘*‘)
{flag=0;i+=2;continue;}
else
{outfile<<“(14/)“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 228864 2015-04-02 09:11 四元式生成.doc
文件 252 2014-05-08 11:30 BinaryType.txt
文件 504 2014-03-28 20:34 cifa.h
文件 307 2014-05-06 20:21 code.txt
文件 102 2014-05-08 11:26 code1.txt
文件 101 2014-05-08 11:27 code2.txt
文件 140 2014-05-08 11:30 Type.txt
文件 2017 2014-04-08 20:37 yufa.h
文件 9728 2014-03-13 11:49 符号表.xls
文件 4133 2014-03-28 20:34 词法函数.cpp
文件 14016 2014-06-05 10:13 语法函数.cpp
文件 820 2014-04-08 20:29 语法分析.cpp
- 上一篇:SNL递归下降语法分析 C++实现
- 下一篇:c语言版网吧计费管理系统修改版
相关资源
- 算符优先语法分析器(C语言编写)
- 编译原理c语言编译器
- 编译原理实验-词法分析(c语言代码)
- 北邮-编译原理-词法分析
- 语法分析c语言实现程序代码+实验报告
- 实现语法分析器-编译原理
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 词法分析器有去除注释功能
- 语法分析器 tiny语言语法分析
- C++语法分析器
- 自定义词法规则的词法分析器
- 语法分析c语言实现含报告
- C语言词法分析程序
- 简易词法分析器——基于C语言
- 词法分析C++源码
- 词法分析代码内有报告
- 编译原理词法分析实验
- LL1语法分析器(c++)
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- LL(1)语法分析器C++版
- 编译技术实验(Pascal代码转汇编语言
- LR(0)语法分析器程序
- TINY扩充语言的语法分析(实现 while、
- 编译原理课程设计词法语法分析器
- 编译原理LL1语法分析器C++版源代码
- LEX实现一个C语言子集的词法分析器
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
评论
共有 条评论