资源简介
词法分析器:1) 定义目标语言的可用符号表和构词规则;
2) 依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;
3) 对正确的单词,按照它的种别以的形式保存在符号表中;
4) 对不正确的单词,做出错误处理。
算符优先算法:
若输入文法:
E->E+T | T
T->T*F | F
F-> (E) | i
根据算符优先分析法,将赋值语句进行语法语义分析,翻译成等价的一组基本操作,每一基本操作用四元式表示
代码片段和文件信息
#include
#include
#include
//#include
using namespace std;
string KEYWORD[15]= {“if““else““void““return““while““then““for““do“ //关键字
“int““char““double““float““case““cin““cout“
};
char SEPARATER[8]= {‘;‘‘‘‘{‘‘}‘‘[‘‘]‘‘(‘‘)‘}; //界符
char OPERATOR[8]= {‘+‘‘-‘‘*‘‘/‘‘>‘‘<‘‘=‘‘!‘}; //运算符
char FILTER[4]= {‘ ‘‘\t‘‘\r‘‘\n‘}; //过滤符(空格 水平制表 回车 换行)
const int IDENTIFIER=200; //标识符值
const int CONSTANT=201; //常数值
const int FILTER_VALUE=202; //过滤字符值
//判断是否为关键字
bool IsKeyword(string word)
{
for(int i=0; i<15; i++)
{
if(KEYWORD[i]==word)
{
return true;
}
}
return false;
}
//判断是否为界符
bool IsSeparater(char ch)
{
for(int i=0; i<8; i++)
{
if(SEPARATER[i]==ch)
{
return true;
}
}
return false;
}
//判断是否为运算符
bool IsOperator(char ch)
{
for(int i=0; i<8; i++)
{
if(OPERATOR[i]==ch)
{
return true;
}
}
return false;
}
//判断是否为过滤符
bool IsFilter(char ch)
{
for(int i=0; i<4; i++)
{
if(FILTER[i]==ch)
{
return true;
}
}
return false;
}
//判断是否为大写字母
bool IsUpLetter(char ch)
{
if(ch>=‘A‘ && ch<=‘Z‘) return true;
return false;
}
//判断是否为小写字母
bool IsLowLetter(char ch)
{
if(ch>=‘a‘ && ch<=‘z‘) return true;
return false;
}
//判断是否为数字
bool IsDigit(char ch)
{
if(ch>=‘0‘ && ch<=‘9‘) return true;
return false;
}
//返回每个字的值
template
int value(T *aint nT str)
{
for(int i=0; i<=n; i++)
{
if(a[i]==str) return i+1;
}
return -1;
}
//词法分析
void analyse(FILE * fpin)
{
//ofstream f(“词法分析的结果.txt“);
char ch=‘ ‘;
string arr=““;
while((ch=fgetc(fpin))!=EOF)//当不为结束字符时
{
arr=““;
if(IsFilter(ch)) {} //判断是否为过滤符
else if(IsLowLetter(ch)) //判断是否为关键字
{
while(IsLowLetter(ch))
{
arr += ch;
ch=fgetc(fpin);
}
fseek(fpin-1LSEEK_CUR);
if(IsKeyword(arr))
{
cout<<“1“<<“ “<<‘\t‘< }
else
{
cout<<“2“<<“ “<<‘\t‘< }
}
else if(IsDigit(ch)) //判断是否为数字
{
while(IsDigit(ch)||(ch==‘.‘&&IsDigit(fgetc(fpin))))
{
arr += ch;
ch=fgetc(fpin);
}
fseek(fpin-1LSEEK_CUR);
cout<<“3“<<“ “<<‘\t‘< }
else if(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘)
{
while(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘||IsDigit(ch))
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 988337 2018-05-27 10:19 编译原理--词法分析器+语法分析器 源代码\词法分析器\bin\Debug\词法分析器 .exe
文件 4975 2018-05-27 17:12 编译原理--词法分析器+语法分析器 源代码\词法分析器\main.cpp
文件 40555 2018-05-27 10:19 编译原理--词法分析器+语法分析器 源代码\词法分析器\obj\Debug\main.o
文件 1116 2018-05-26 20:52 编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .cbp
文件 147 2018-05-27 10:21 编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .depend
文件 321 2018-05-27 17:12 编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .layout
文件 152 2018-05-27 10:14 编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器.depend
文件 323 2018-05-27 10:19 编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器.layout
文件 976279 2018-05-28 13:18 编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug\词法分析器.exe
文件 976309 2018-05-27 10:56 编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug\语法分析器.exe
文件 7974 2018-05-28 13:25 编译原理--词法分析器+语法分析器 源代码\语法分析器\main.cpp
文件 22083 2018-05-28 13:18 编译原理--词法分析器+语法分析器 源代码\语法分析器\obj\Debug\main.o
文件 1130 2018-05-26 20:37 编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.cbp
文件 147 2018-05-27 11:08 编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.depend
文件 324 2018-05-28 13:25 编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.layout
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\词法分析器\bin\Debug
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\词法分析器\obj\Debug
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\语法分析器\obj\Debug
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\词法分析器\bin
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\词法分析器\obj
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\语法分析器\bin
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\语法分析器\obj
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\词法分析器
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码\语法分析器
目录 0 2019-01-07 21:36 编译原理--词法分析器+语法分析器 源代码
----------- --------- ---------- ----- ----
3020172 26
- 上一篇:机票预订系统需求分析报告
- 下一篇:Axure谷歌chrome浏览器插件0.6.3版
相关资源
- pl0语法分析器
- LR(0)语法分析的实现
- 编译原理 三地址代码生成器
- PL/0语言词法及语法分析系统的设计与
- 编译原理实验报告+源代码 预测分析法
- LL(1)分析过程模拟
- 编译原理实验常工院版
- 编译原理FOR循环语句的翻译程序设计
- LR(0)完整的语法分析方法(拓广文
- OUC编译原理全部实验
- 编译原理上机源代码LR语法分析器
- 编译原理LR0分析代码完整
- 哈工大编译原理实验三语义分析实验
- 用YACC实现语法分析器
- LL(1)语法分析程序实验报告
- 编译原理实验报告,词法分析,语法
- 简单词法分析器,输出token和简单符号
- 算符优先分析程序的设计可趁设计
- 赋值语句的语法分析程序递归下降法
- 山东大学编译原理实验
- Sample语言词法分析器标准答案
- 编译原理语法分析实验报告
- 编译原理-语法分析-LL1
- SLR1语法分析生成器
- 编译原理优先算法代码,及详细实验
- K线图,走势图,支持通达信语法
- 编译原理 课后习题答案 陈意云 张昱
- 编译原理语法树的实现
- 编译原理实验MiniPascal编译器设计 Fl
- 子集构造法NFA的确定化
评论
共有 条评论