1. 文法 G(S):

(1)S -> AB

(2)A ->Da|ε

(3)B -> cC

(4)C -> aADC |ε

(5)D -> b|ε

验证文法 G(S)是不是 LL(1)文法?

解:

  Select(A -> Da) = First(Da) = {b,a}

  Select(A -> ε) = (Follow(ε)-{ε})∪Follow(A) = {b,a,c,ε}

  Select(C -> aADC) = First(aADC) = {a}

  Select(C -> ε) = (Follow(ε)-{ε})∪Follow(C) = {ε}

  Select(D -> b) = First(b) = {b}

  Select(D -> ε) = (Follow(ε)-{ε})∪Follow(D) = {a,ε}

  ∵Select(A -> Da) ∩ Select(A -> ε) ≠ ∅

  ∴文法G(s)不是LL(1)文法。

2.(上次作业)消除左递归之后的表达式文法是否是LL(1)文法?

解:

消除左递归后:

  E -> TE'

  E' -> +TE' | ε

  T -> FT'

  T' -> *FT' | ε

  F -> (E) | i

SELECT(E' -> +TE') = FIRST(+TE') = {+}

SELECT(E' -> ε) = (FIRST(ε) - { ε }) U FOLLOW(E') = FOLLOW(E') = { ) , ε }

SELECT(T' -> *FT') = FRIST(*FT')={ * }

SELECT(T' -> ε) = (FIRST(ε) - { ε }) U FOLLOW(T') = FOLLOW(T') = { ε,+,) }

SELECT(F -> (E) ) = FIRST((E)) = { ( }

SELECT(F -> i) = FIRST(i) = { i }

∵SELECT(E' -> +TE') ∩ SELECT(E' -> ε) = ø

SELECT(T' -> *FT') ∩ SELECT(T' -> ε) = ø

SELECT(F -> (E) ) ∩ SELECT(F -> i) = ø

∴ 该文法是LL(1)文法。

3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码。

E()

{T();

E'();

}

E'()

T()

T'()

F()

解:

void ParseE() {

  switch (lookahead) {

    case'(','i':

      ParseT();

      ParseE'();

      break;

    default:

      print("syntax error\n");

      exit(0);

  }

}

void ParseE'(){

  switch(lookahead){

    case '+':

      MatchToken('+');

      ParseT();

      ParseE'();

      break;

    case ')','#':

      break;

    default:

      print("syntax error\n");

      exit(0);

  }

}

void ParseT(){

  switch (lookahead) {

    case '(','i':

      ParseF();

      ParseT'();

      break;

    default:

      print("syntax error \n");

      exit(0);

  }

}

void ParseT'(){

  switch(lookahead){

    case '*':

      MatchToken('*');

      ParseF();

      ParseT'();

      break;

    case '+',')','#':

      break;

    default:

      print("syntax error \n");

      exit(0);

  }

}

void ParseF(){

  switch(lookahead){

    case '(':

      MatchToken('(');

      ParseE();

      MatchToken(')');

      break;

    case 'i':

      MatchToken('i');

      break;

    default:

      print("syntax error \n");

      exit(0);

  }

}

 4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

第十一次 LL(1)文法的判断,递归下降分析程序的更多相关文章

  1. 作业十一——LL(1)文法的判断,递归下降分析程序

    作业十一——LL(1)文法的判断,递归下降分析程序 判断是否为LL(1)文法 选取有多个产生式的求select,只有一条产生式的无需求select 同一个非终结符之间求交集,全部判断为空后则为LL(1 ...

  2. 十一次作业——LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  3. 第十一次作业 LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  4. 编译原理之LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  5. LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da | ε (3)B -> cC (4)C -> aADC | ε (5)D -> b | ε 验证文法 G ...

  6. 编译原理:LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  7. LL(1)文法--递归下降程序

    递归下降程序 递归下降程序一般是针对某一个文法的.而递归下降的预测分析是为每一个非终结符号写一个分析过程,由于文法本身是递归的,所以这些过程也是递归的. 以上是前提. Sample 假如给的是正规式子 ...

  8. 作业十一——LL(1)文法的判断

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  9. 小程序内嵌H5页面判断微信及小程序环境

    判断微信及小程序环境 1.H5页面引入jweixin-1.3.2.js 2. var ua = window.navigator.userAgent.toLowerCase(); if(ua.matc ...

随机推荐

  1. java基础学习笔记五(抽象类)

    java基础学习总结——抽象类 抽象类介绍

  2. UNP学习 路由套接口

    一.概述 在路由套接口中支持三种类型的操作: 1.进程能通过写路由套接口想内核发消息.举例:路径就是这样增加和删除的. 2.进程能在路由套接口上从内核读消息. 3.进程可以用sysctl函数得到路由表 ...

  3. SPI子系统

    一.SPI子系统模型 三个组成部分: SPI核心:连通了SPI客户驱动.SPI主控制器驱动 SPI控制器驱动:驱动芯片中的SPI控制器 SPI的FLASH(客户驱动) 二.SPI控制器驱动分析 sta ...

  4. MySQL图形化管理工具之Navicat安装以及激活

    软件以及激活包下载地址 1. 安装navicat 双击navicat_trial_11.1.20.0.1449226634.exe,一路下一步安装(记住安装目录) 2. 激活 双击PatchNavic ...

  5. js打印窗口内容并当窗口内容较长时自动分页

    项目环境Angular: 方法1.window.print() HTML页面上的代码: <div id="tenementBillTable" class="dia ...

  6. 【运维】使用Serv-U搭建FTP服务器

    1.先安装好Serv-U,并作为系统服务安装 2.打开Serv-U,新建一个域 3.添加用户 4.解决阿里云专有网络的一个问题 遇到一个情景:需要使用Serv-U进行FTP更新软件,其中使用PASV的 ...

  7. Nginx网络架构实战学习笔记(五):大访问量优化整体思路、ab压力测试及nginx性能统计模块、nginx单机1w并发优化

    文章目录 大访问量优化整体思路 ab压力测试及nginx性能统计模块 ab压力测试及nginx性能统计模块 ab压力测试 nginx性能统计模块 nginx单机1w并发优化 整装待发: socket ...

  8. Struts1.3——文件上传和下载

    1.Struts文件上传 在Web开发中,会经常涉及到文件的上传和下载,比如在注册账户的时候,我们需要上传自己的头像等. 我们可以利用Struts很方便地实现文件的上传. 1.1 开发步骤 现在,假设 ...

  9. C++构造函数异常(一)

    C++ 构造函数的异常是一个比较难缠的问题,很多时候,我们可能不去考虑这些问题,如果被问到,有人可能会说使用RAII管理资源. 但你真的考虑过如果构造函数失败了,到底会发生什么吗,前面构造成功的成员. ...

  10. 百度之星资格赛2018B题-子串查询

    子串查询 题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯an,接下来他 ...