资源简介
本资源使用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语言程序
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- 算符优先语法分析器(C语言编写)
- VC++MFC小游戏实例教程(实例)+MFC类库
- 编译原理c语言编译器
- 编译原理实验-词法分析(c语言代码)
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
评论
共有 条评论