没有合适的资源?快使用搜索试试~ 我知道了~
编译原理词法分析器报告(c++)
3星 · 超过75%的资源 需积分: 12 17 下载量 74 浏览量
2013-06-14
09:19:22
上传
评论
收藏 175KB DOC 举报
温馨提示
试读
15页
设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理 的理解。本实验的重点是理解词法分析器的输入与输出;难点是常数的识别。
资源推荐
资源详情
资源评论
一、实验目的
1.设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理
的理解。
2.本实验的重点是理解词法分析器的输入与输出;难点是常数的识别。
二、实验原理
1.词法分析程序的功能:
输入源程序,输出单词符号,如图所示:
源程序 单词符号
2.处理过程:在扫描源程序字符串时,一旦识别出关键字、分隔符、标识
符、无符号常数中之一,即以单词形式(各类单词均采用相同的结构,即
二元式编码形式)输出。每次调用词法分析程序,它均能自动继续扫描下
去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词
串形式的源程序。
三、实验要求
1.对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单
词类型,单词符号)显示;
2.可以将要分析的程序保存到文件中进行读取;
3.删除无用的空白字符、回车符、及其它非实质性符号。
四、程序设计
本程序规定:
(1)关键字"for","main","begin","int","if"。
(2)运算符:"+","-","*","/","++","--","<",">","!=","==","<=",">="
(3)界符:"{","}","[","]",";",",","*/","(",")","/*"
(4)其他标记 如字符串,表示以字母开头的标识符。
(5)空格、回车、换行符跳过。
五、代码和截图
自己写程序如下:
#include<stdio.h>
#include<conio.h>
#include<cstdlib>
#include<string>
#include <iostream>
#include <fstream>
#include <stdlib.h>
词法分析器
#define MAX 33
using namespace std;
char ch=' ';
/*string keyword[8]={"begin","end","if","else","while","void","write","read"};
int iskeyword(string ip)//是否是关键字
{
for(int i=0;i<8;i++)
if(ip==keyword[i])
return 1;
else return 0;
}
*/
int isletter(char ip)//是否是字母
{
if(((ip>='a')&&(ip<='z'))||((ip<='Z')&&(ip>='A')))
{return 1;}
else return 0;
}
int isnumber(char ip)//是否是数字
{
if((ip>='0')&&(ip<='9'))
return 1;
else return 0;
}
int isanum(string num)
{
if(num=="")
return 0;
for(int i=0 ; i<num.size();i++)
{
if(!isnumber(num[i]))
{break;}
}
if(i!=num.size())
return 0;
else return 1;
//cout<<"$$$$$$$$$"<<i<<endl;
}
int isat(string num)
{
//if(num=="")
//return 0;
for(int i=0 ; i<num.size();i++)
{
if(num[i]=='@')
{break;}
}
if(i!=num.size())
return 1;
else return 0;
//cout<<"$$$$$$$$$"<<i<<endl;
}
void zhuanhuan(string str)
{
int temp;
int num,i;
int aa[20];
char bb[20];
//char cc[20]; bb[20]=str;
for(i=0;i<str.size();i++)
{
bb[i]=str[i];
}
//for(j=i;j<str.size();j++)
// {
// bb[j]=' ';
// }
temp=atoi(bb);
//cout<<"转换成二进制数是";
i=0;
while(temp !=0)
{
num = temp%2;
aa[i] = num;
i++;
temp = temp/2;
}
for(num=i-1;num>=0;num--)
{
cout<<aa[num];
}
// cout<<endl;
}
剩余14页未读,继续阅读
资源评论
- lanceyongyuan2013-11-26不好用。。还得改
daisy_login
- 粉丝: 8
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功