编译原理|LL(1)语法分析实验
LL(1)语法分析实验
一、实验目的
- 了解 LL(1)语法分析是如何根据语法规则逐一分析词法分析所得到的单词,检查语法错误,即掌握语法分析过程。
- 掌握LL(1)语法分析器的设计与调试。
二、实验内容
针对CP语言中简单算术表达式文法G[E]:
E→TE’
E’→ATE’|ε
T→FT’
T’→MFT’ |ε
F→(E) | i
A → + | -
M → * | /
求解相应的FIRST、FOLLOW集,构造预测分析表,并编写LL(1)语法分析程序,并给出测试句子的分析过程。
(注:如果有选做专题7关于LL(1)文法判断的同学,可以将专题7的部分整合到这个实验的前面,自动产生预测分析表,相当于把这个程序做成一个通用的LL(1)分析器)
- 输入:是词法分析输出的二元组序列,即任意简单算术表达式经过专题1程序输出后得到的结果。【上述文法中i即对应词法分析的标识符, ±*/分别对应词法分析得到的运算符】
- 处理:基于分析表进行 LL(1)语法分析,判断其是否符合文法。
- 输出:串是否合法。
三、实验要求
- 构建合适的数据结构来表示文法符号和文法规则。【参考递归下降分析⼦程序】
- 设计恰当的数据结构存储预测分析表。(ε可用特殊符号代替)
- 任选 C/C++/Java 或其他高级语言中的一种作为编程语言,要求所编程序结构清晰。
四、程序代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <stack>using namespace std;#define MAX 100
char c[8]={'i','(','+','-','*','/',')','#'};
char w[7]={'E','e','T','t','F','A','M'};
char mapp[7][8][5]= {"Te","Te","%","%","%","%","%","%","%","%","ATe","ATe","%","%","#","#","Ft","Ft","%","%","%","%","%","%","%","%","#","#","MFt","MFt","#","#","i","(E)","%","%","%","%","%","%","%","%","+","-","%","%","%","%","%","%","%","%","*","/","%","%"};int panduan(char ch)
{for(int i=0;i<8;i++){if(ch==c[i])return 1;}return 0;
}
int findc(char ch)
{if(ch>='0'&&ch<='9')return 0;for(int i=0;i<8;i++){if(ch==c[i])return i;}return 0;
}
int findw(char ch)
{for(int i=0;i<7;i++){if(ch==w[i])return i;}return 0;}int main()
{char str[MAX];int ip;stack <char> q;cout<<"输入的格式为算数式后跟#号"<<endl;cout<<"比如:"<<" 9+8*2#"<<endl;cout<<"“e->#”此类产生式中的#号代表空集"<<endl;cout<<"请输入你的表达式"<<endl;cin>>str;ip=0;q.push('#');q.push('E');while(!q.empty()){char ch=q.top();if(ch=='#')break;int i=findw(ch);int j=findc(str[ip]);if(ch==str[ip]){q.pop();cout<<"匹配"<<str[ip]<<endl;ip++;}else if(str[ip]>='0'&&str[ip]<='9'&&ch=='i'){q.pop();cout<<ch<<"->"<<str[ip]<<endl;cout<<"匹配"<<str[ip]<<endl;ip++;}else if(panduan(ch)){cout<<"不匹配"<<endl;return 0;}else if(mapp[i][j][0]=='%'){cout<<"不匹配"<<endl;return 0;}else if(mapp[i][j][0]=='#'){cout<<ch<<"->"<<"#"<<endl;q.pop();}else{int n=strlen(mapp[i][j]);q.pop();for(int k=n-1;k>=0;k--){q.push(mapp[i][j][k]);}cout<<ch<<"->"<<mapp[i][j]<<endl;}}return 0;
}
五、结果分析
编译原理|LL(1)语法分析实验相关推荐
- java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...
- 【编译原理】Python语法分析LL(1)、LR(1)
目录 一.实验目的 二.实验任务 三.实验原理 1 LL(1)文法 2 LR文法 四.实验过程 1 LL(1)文法 2 LR文法 五.实验结果 1 LL(1)文法 2 LR(0)文法 3 ...
- 编译原理SNL语言编译器实验报告
完成实验内容 实验要求: (1)设计并实现SNL程序设计语言的编译程序 (2)四个必做: 词法分析模块 语法分析模块(递归下降方法) 语法分析模块(LL(1)方法) 语义分析模块 (3)编程语言不限 ...
- 编译原理逆波兰式实验java_【实验三】—— 逆波兰式生成实验报告
实验三 逆波兰式生成实验报告 一.实验名称:逆波兰式生成 二.仪器.设备:计算机 三.参考资料:<编译原理教程>习题解析与上机指导(西安电子科技大 胡元义等) 四.实验目的:将非后缀式用来 ...
- 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc
逆波兰式算法的编译原理实验过程 实验目的 深入理解算符优先分析法 掌握FirstVt和LastVt集合的求法有算符优先关系表的求法 掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化 实验内容及要求 ...
- 【编译原理】自上而下语法分析(CC++源码+实验报告)
文章目录 1 实验目的和内容 1.1 实验目的 1.2 实验内容 1.3 实验要求 2 设计思想 2.1 根据BNF描述该文法 2.2 根据文法画相应的语法图 2.3 判断是否是LL(1)文法-求Fi ...
- 编译原理教程_4 语法分析
文章原稿 https://gitee.com/fakerlove/fundamentals-of-compiling 文章目录 4. 语法分析 4.1 概述 4.1.1功能 4.1.2 基本任务 4. ...
- 编译原理学习之语法分析
1.语法分析的地位 –是编译程序的核心部分. 2.语法分析的任务 –识别由词法分析得出的单词序列是否是给定文法的句子. 3.语法分析的理论基础 –上下文无关文法和下推自动机 4.语法分析的方式 1)自 ...
- 编译原理 —— 什么是语法分析
语法分析 识别句子中的各个短语 从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree) 语法分析要解决的问题是:如何根据语法规则为输入句子构造语法分析树 转载地址: ...
- 编译原理——自上而下的语法分析方法(LL分析法)
自上而下的语法分析方法(LL分析法) 概述: 语法分析的地位:编译程序的核心部分 任务:词法分析出来的单词序列是否是给定文法的句子 理论:上下文无关文法和下推自动机 方式:自上而下的语法分析(推导)和 ...
最新文章
- IOS/Android模拟器运行APP调试方法
- 专访英特尔戴金权 | AI和大数据正在这样重塑英特尔
- MySQL复制常用拓扑结构详解
- SAP Commerce Impex语法
- Mysql中各种与字符编码集(character_set)有关的变量含义
- H - Message Bomb Gym - 102798H
- mysql动态变量查询_MySQL将变量传递给动态查询
- 20190530本科教学PPT 文本挖掘的两种基本方法(TF-IDF和LDA)
- winpcap基本原理及常见应用_碳十四测年的基本原理和常见应用谬误
- fisher线性判别算法python_Fisher线性判别(LDA)python实现
- JDK1.5英文版CHM文档下载地址
- 【Web技术】771- 图片懒加载从简单到复杂
- JS项目(制作随机选号页面)
- 串口服务器通讯协议,串口服务器的组成和应用实例
- PaddlePadlle2.3实现人脸关键点检测
- Android 手机号输入格式化 3-3-4
- 自己用c语言做的日历
- Wpf大屏软件开发过程中遇到的若干问题
- 数据预处理之数据缩放
- 入手评测 赛扬g6900和奔腾g7400 选哪个好
热门文章
- 【processing】Daniel Shiffman编程挑战题解、思维介绍及代码(1)穿越星际效果编译
- 8款网页瀑布流布局插件(很不错的效果)
- EDGEX FOUNDRY配置参数 --- sys-mgmt-agent
- 基于Html的个性化新闻资讯网页设计
- 搜索Instagram用户名API
- 计算机基础知识——基础入门(一)
- Metasploit -- 各类密码破解
- android stop 服务,当调用stopService方法时服务不会停止
- 联想电脑管家不显示开机时间_联想电脑怎么设置显示开机时间
- win7怎样设置计算机休眠时间,win7休眠时间怎么设置