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. 测试demo controllerweb.xml

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  2. Spring data jpa 依赖配置

    <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...

  3. PHP dir() 函数

    使用 dir() 函数: <?php$d = dir(getcwd()); echo "Handle: " . $d->handle . "<br> ...

  4. 04-树5 Root of AVL Tree(25 分)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  5. jdbc blob插入及查询操作

    首先建一张表 create table picture( picId ) primary key not null, picName ) not null, picfile image null ) ...

  6. ZROI week6

    ZROI week6 T1 用一个类似背包的东西记录答案. T2 好像直接用|操作即可. T3 瞎搞就完事了 T4 启发式合并,然而变量写错了,就没了... 总结 100 + 100 + 100 + ...

  7. context和getApplicationContext()的区别

    在android中常常会遇到与context有关的内容 浅论一下 context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder ...

  8. 为什么我markdown里的数学公式全崩了???

    目录 try a try ac is ok Typecho博客 https://www.diyifanwen.com/fanwen/dangyuanxindetihui/2665516.htm htt ...

  9. sparql学习sparql示例、dbpedia在线验证

    sparql学习sparql示例.dbpedia在线验证 导言 作为sparql群的群主,自己也不太懂sparql,竟然意外接到了一份作业.好久没有接活了.主要就是复习了一下各个语言怎么写.记录一下, ...

  10. Mac Office2016 安装及破解

    一.安装包下载地址 http://officecdn.microsoft.com/sg/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/Microsoft ...