资源简介
本资源使用C++实现了语法分析器,内容包括C++源代码与exe文件、input.txt和程序运行说明文档。该资源的文字版信息请访问博客《编译原理实践:C++实现语法分析器(学习笔记)》(https://blog.csdn.net/weixin_40589192/article/details/106933125)。
代码片段和文件信息
#include
#include /*包含库所用的某些宏和变量*/
#include /*包含库*/
#include /*包含字符串处理库*/
#define _KEY_WORD_END “waiting for your expanding“
/*定义关键字结束标志*/
using namespace std;
typedef struct /*单词二元组*/
{
int categoryCode; /*单词种别*/
char *value; /*单词自身的值*/
}WORD;
/*词法分析部分*/
char inputBuffer[10000]; /*输入缓冲区*/
char wordBuffer[1000] = ““; /*单词缓冲区*/
int inputBufferIndex; /*输入缓冲区下标*/
int wordBufferIndex; /*单词缓冲区下标*/
char ch; /*当前读入字符*/
char *rwtab[] = {“begin“ “void“ “int“ “char“ “main“ “if“ “scanf“ “printf“ “while“ “for“ “return“ “end“ _KEY_WORD_END};
/*关键字数组*/
WORD* scaner(); /*声明词法分析函数,获得一个单词*/
char getChar(); /*声明字符读取函数,从输入缓冲区读取一个字符*/
void removeBlankSymbol(); /*声明去掉空格和\t函数*/
void concatWord(); /*声明拼接单词函数*/
int isLetter(); /*声明判断是否字母函数*/
int isDigit(); /*声明判断是否数字函数*/
int retriveKeyword(); /*声明检索关键字数组函数,在字符数组rwtab中检索*/
void retractChar(); /*声明回退字符函数,回退一个字符*/
char* digitToBinary(); /*声明将十进制转换成二进制函数*/
char* changeWordFormation();/*声明更改单词的输出形式函数*/
/*语法分析部分*/
void lrparser(); /*声明语法分析函数*/
void statementString(); /*声明语句串分析函数*/
void statement(); /*声明语句分析函数*/
void expression(); /*声明(等号右边的)表达式分析函数*/
void term(); /*声明项分析函数*/
void factor(); /*声明因子分析函数*/
void isLexicalError(); /*声明检测词法错误函数*/
bool isLineBreak(); /*声明检测换行符函数*/
WORD *oneWord = new WORD; /*存放一个单词*/
int rowNumber = 1; /*记录当前行数*/
bool lexicalError = false; /*检测是否有词法错误*/
bool syntacticError = false; /*检测是否有语法错误*/
int main()
{
freopen(“input.txt““r“stdin);
freopen(“output.txt““w“stdout);
inputBufferIndex = 0; // 初始化输入缓冲区下标
scanf(“%[^#]s“ inputBuffer); // 读入源程序字符串到缓冲区,以#结束,允许多行输入,#会读成‘\0‘
printf(“Your words(must start with ‘begin‘ and end with ‘end‘):\n\n“);
printf(“---------------------------------\n“);
printf(“%s\n“ inputBuffer);
printf(“---------------------------------\n\n“);
printf(“The result of syntactic analysis:\n\n“);
oneWord = scaner(); // 获得一个新单词
lrparser();
if(lexicalError == true && syntacticError == true)
{
printf(“\nPlease correct the above lexical errors and syntactic errors for syntactic analysis!\n“);
}
else
{
if(lexicalError == true)
{
printf(“\nPlease correct the above lexical errors for syntactic analysis!\n“);
}
else if(syntacticError == true)
{
printf(“\nPlease correct the above syntactic errors for syntactic analysis!\n“);
}
}
return 0;
}
/*语法分析部分*/
/*语法分析函数*/
void lrparser()
{
while(isLineBreak()); // 判断是否存在换行
if(oneWord -> categoryCode != 1) // ‘begin‘的种别码
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 79 2020-06-23 22:29 编译原理实践:C++实现语法分析器\input.txt
文件 28089 2019-11-23 01:49 编译原理实践:C++实现语法分析器\syntacticParser.cpp
文件 949095 2019-11-23 01:40 编译原理实践:C++实现语法分析器\syntacticParser.exe
文件 548 2019-11-23 01:48 编译原理实践:C++实现语法分析器\程序运行说明文档.txt
目录 0 2020-06-23 22:29 编译原理实践:C++实现语法分析器
----------- --------- ---------- ----- ----
977811 5
- 上一篇:c++页面置换算法模拟程序-
- 下一篇:小波分析的c语言程序
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- 北邮-编译原理-词法分析
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
评论
共有 条评论