资源简介
词法分析器: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版
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译词法分析器识别关键字常数和符
- Delphi做的用于分析Pascal语言的词法分
- 编译原理LR(0)语法分析
- 见过的最好 英语语法讲义
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- Kuka库卡机器人编程语法进阶
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- arcpy语法教程入门以及ArcGIS的脚本构建
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- pl/0编译器 语法分析
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- Ultraedit环境下配置verilog语法高亮的字
- 编译原理课设c编译器
- 赋值语句翻译四元式
评论
共有 条评论