资源简介
将实验一“词法分析”的输出结果,作为表达式语法分析器的输入,进行语法解析,对于语法正确的表达式,报告“语法正确”; 对于语法错误的表达式,报告“语法错误”, 指出错误原因。
把语法分析器设计成一个独立一遍的过程。
代码片段和文件信息
#include “stdafx.h“
#include
#include
#include
#include
using namespace std;
static int rg=1;
struct newsym
{
char restr[15];
};
newsym sym[50];
int E(int nnewsym *sym);
int T(int nnewsym *sym);
int D(int nnewsym *sym);
int E(int nnewsym *sym)
{
if (!strcmp(sym[n].restr“plus“) || !strcmp(sym[n].restr“minus“))
{
n++;
if(!strcmp(sym[n-2].restr“lparen“))
{
cout<<“缺少标识符或数字“< rg=0;
}
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=T(nsym);
}
}
else if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=T(nsym);
}
if((!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“))&&(!strcmp(sym[n-1].restr“ident“) ||!strcmp(sym[n-1].restr“number“)))
{
n++;
cout<<“缺少运算符“< rg=0;
}
if((!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“))&&!strcmp(sym[n-1].restr“rparen“))
{
n++;
cout<<“缺少运算符!“< rg=0;
}
while (!strcmp(sym[n].restr“plus“)||!strcmp(sym[n].restr“minus“))
{
n++;
n=T(nsym);
}
return n;
}
int T(int nnewsym *sym)
{
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=D(nsym);
}
else
{
cout<<“缺少标识符或数字“< rg=0;
}
while (!strcmp(sym[n].restr“times“)||!strcmp(sym[n].restr“slash“))
{
n++;
n=D(nsym);
}
return n;
}
int D(int nnewsym *sym)
{
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“) )
{
n++;
}
else if (!strcmp(sym[n].restr“lparen“))
{
n++;
n=E(nsym);
if (!strcmp(sym[n].restr“rparen“))
{
n++;
}
else
{
cout<<“缺少右括号“< rg=0;
}
}
else
{
cout<<“缺少标识符或数字“< rg=0;
}
return n;
}
int main()
{
ifstream infile(“2.txt“);
string buffer;
int ijn;
for (n=0;n<=49;n++)
{
sym[n].restr[0]=‘\0‘;
}
n=0;
while (!infile.eof() && infile >> buffer)//没有到文件末尾,读取文件内容到buffer
{
i=j=0;
if(buffer[0]==‘(‘)
{
while(buffer[i+1]!=‘‘)
{
i++;
sym[n].restr[j]=buffer[i];
j++;
}
sym[n].restr[j]=‘\0‘;
n++;
}
} //把字符串放入二维数组
n=0j=0;
n=E(nsym);
int right_answer=1;
if (!strcmp(sym[n-1].restr“\0“))
{
right_answer=0;
}
else
{
right_answer=1;
}
if (rg==1 && !strcmp(sym[n].restr“\0“) && n!=0 && right_answer==1)
{
cout<<“语法正确!“< system(“pause“);
}
else
{
cout<<“语法错误!“< system(“pause“);
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2751 2014-01-09 12:32 2\2\2.cpp
文件 92 2014-01-09 12:38 2\2\2.txt
文件 4356 2014-01-04 15:00 2\2\2.vcxproj
文件 1325 2014-01-04 15:00 2\2\2.vcxproj.filters
文件 143 2014-01-04 15:00 2\2\2.vcxproj.user
文件 406 2014-01-04 15:00 2\2\Debug\2.exe.em
文件 472 2014-01-11 12:32 2\2\Debug\2.exe.em
文件 381 2014-01-11 12:32 2\2\Debug\2.exe.intermediate.manifest
文件 60 2014-01-14 16:10 2\2\Debug\2.lastbuildstate
文件 214248 2014-01-11 12:32 2\2\Debug\2.obj
文件 1179648 2014-01-11 12:32 2\2\Debug\2.pch
文件 192 2014-01-04 15:00 2\2\Debug\2_manifest.rc
文件 2978 2014-01-11 12:32 2\2\Debug\cl.command.1.tlog
文件 26418 2014-01-11 12:32 2\2\Debug\CL.read.1.tlog
文件 1798 2014-01-11 12:32 2\2\Debug\CL.write.1.tlog
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
文件 2 2014-01-11 12:32 2\2\Debug\li
............此处省略35个文件信息
- 上一篇:DNS隐秘隧道pcap包
- 下一篇:uif65d.zip
相关资源
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- TINY+编译器 改编自原版TINY
- 编译原理课程设计 while do循环语句翻
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
- Skyline高效检索算法实现.zip
- 天津理工大学编译原理实验2
- STM8S103系列IO模拟串口通信实现真正串
- stm32f103c8t6移植uC/OS-III基于HAL库的工程
- 温度、一氧化碳、二氧化碳、PM2.5以及
- 王道论坛计算机考研机试指南
- 有限元中网格剖分算法
- 词法语法分析器
- PLC开源资料
- STM8L051.串口接收IDLE中断.zip
- The_C_Programming_Language(英文版)
- 广东工业大学题目详解含截图Anyview
- 基于单片机的多功能路灯自动控制系
- 嵌入式实时操作系统ucos原理和实践
- pdf417编码和解码
- PID控制算法大全经典
- 征服C指针.pdf完整高清版
- 编译原理简单赋值语句的语法分析程
评论
共有 条评论