LL(1)语法分析实验

一、实验目的

  1. 了解 LL(1)语法分析是如何根据语法规则逐一分析词法分析所得到的单词,检查语法错误,即掌握语法分析过程。
  2. 掌握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. 输入:是词法分析输出的二元组序列,即任意简单算术表达式经过专题1程序输出后得到的结果。【上述文法中i即对应词法分析的标识符, ±*/分别对应词法分析得到的运算符】
  2. 处理:基于分析表进行 LL(1)语法分析,判断其是否符合文法。
  3. 输出:串是否合法。

三、实验要求

  1. 构建合适的数据结构来表示文法符号和文法规则。【参考递归下降分析⼦程序】
  2. 设计恰当的数据结构存储预测分析表。(ε可用特殊符号代替)
  3. 任选 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)语法分析实验相关推荐

  1. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc

    西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...

  2. 【编译原理】Python语法分析LL(1)、LR(1)

    目录 一.实验目的 二.实验任务 三.实验原理 1  LL(1)文法 2  LR文法 四.实验过程 1  LL(1)文法 2  LR文法 五.实验结果 1  LL(1)文法 2  LR(0)文法 3 ...

  3. 编译原理SNL语言编译器实验报告

    完成实验内容 实验要求: (1)设计并实现SNL程序设计语言的编译程序 (2)四个必做: 词法分析模块 语法分析模块(递归下降方法) 语法分析模块(LL(1)方法) 语义分析模块 (3)编程语言不限 ...

  4. 编译原理逆波兰式实验java_【实验三】—— 逆波兰式生成实验报告

    实验三 逆波兰式生成实验报告 一.实验名称:逆波兰式生成 二.仪器.设备:计算机 三.参考资料:<编译原理教程>习题解析与上机指导(西安电子科技大 胡元义等) 四.实验目的:将非后缀式用来 ...

  5. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc

    逆波兰式算法的编译原理实验过程 实验目的 深入理解算符优先分析法 掌握FirstVt和LastVt集合的求法有算符优先关系表的求法 掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化 实验内容及要求 ...

  6. 【编译原理】自上而下语法分析(CC++源码+实验报告)

    文章目录 1 实验目的和内容 1.1 实验目的 1.2 实验内容 1.3 实验要求 2 设计思想 2.1 根据BNF描述该文法 2.2 根据文法画相应的语法图 2.3 判断是否是LL(1)文法-求Fi ...

  7. 编译原理教程_4 语法分析

    文章原稿 https://gitee.com/fakerlove/fundamentals-of-compiling 文章目录 4. 语法分析 4.1 概述 4.1.1功能 4.1.2 基本任务 4. ...

  8. 编译原理学习之语法分析

    1.语法分析的地位 –是编译程序的核心部分. 2.语法分析的任务 –识别由词法分析得出的单词序列是否是给定文法的句子. 3.语法分析的理论基础 –上下文无关文法和下推自动机 4.语法分析的方式 1)自 ...

  9. 编译原理 —— 什么是语法分析

    语法分析 识别句子中的各个短语 从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree) 语法分析要解决的问题是:如何根据语法规则为输入句子构造语法分析树 转载地址: ...

  10. 编译原理——自上而下的语法分析方法(LL分析法)

    自上而下的语法分析方法(LL分析法) 概述: 语法分析的地位:编译程序的核心部分 任务:词法分析出来的单词序列是否是给定文法的句子 理论:上下文无关文法和下推自动机 方式:自上而下的语法分析(推导)和 ...

最新文章

  1. IOS/Android模拟器运行APP调试方法
  2. 专访英特尔戴金权 | AI和大数据正在这样重塑英特尔
  3. MySQL复制常用拓扑结构详解
  4. SAP Commerce Impex语法
  5. Mysql中各种与字符编码集(character_set)有关的变量含义
  6. H - Message Bomb Gym - 102798H
  7. mysql动态变量查询_MySQL将变量传递给动态查询
  8. 20190530本科教学PPT 文本挖掘的两种基本方法(TF-IDF和LDA)
  9. winpcap基本原理及常见应用_碳十四测年的基本原理和常见应用谬误
  10. fisher线性判别算法python_Fisher线性判别(LDA)python实现
  11. JDK1.5英文版CHM文档下载地址
  12. 【Web技术】771- 图片懒加载从简单到复杂
  13. JS项目(制作随机选号页面)
  14. 串口服务器通讯协议,串口服务器的组成和应用实例
  15. PaddlePadlle2.3实现人脸关键点检测
  16. Android 手机号输入格式化 3-3-4
  17. 自己用c语言做的日历
  18. Wpf大屏软件开发过程中遇到的若干问题
  19. 数据预处理之数据缩放
  20. 入手评测 赛扬g6900和奔腾g7400 选哪个好

热门文章

  1. 【processing】Daniel Shiffman编程挑战题解、思维介绍及代码(1)穿越星际效果编译
  2. 8款网页瀑布流布局插件(很不错的效果)
  3. EDGEX FOUNDRY配置参数 --- sys-mgmt-agent
  4. 基于Html的个性化新闻资讯网页设计
  5. 搜索Instagram用户名API
  6. 计算机基础知识——基础入门(一)
  7. Metasploit -- 各类密码破解
  8. android stop 服务,当调用stopService方法时服务不会停止
  9. 联想电脑管家不显示开机时间_联想电脑怎么设置显示开机时间
  10. win7怎样设置计算机休眠时间,win7休眠时间怎么设置