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

判断是否为LL(1)文法

选取有多个产生式的求select,只有一条产生式的无需求select

同一个非终结符之间求交集,全部判断为空后则为LL(1)文法

求FIRST集

是每条产生式右边所出现的首个终结符的集合

求FOLLOW集

是针对非终结符,找到产生式右边跟在非终结符后的终结符,#为输入串的结束符

求SELECT集

当产生式不推导出ε时,就为FIRST 当产生式推到出ε时,就为(FIRST(A->ε)-{ε})∪FOLLOW{A}

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

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

E() {
T();
E'();
}
E'(){
if('+') {
matchtoken(+);
T();
E();
} else if (')','#') {
}//为空串时
else {
errot;
exit(0);
}//错误提示
} T() {
F();
T'();
} T'() {
if('*') {
matchtoken(*);
F();
T'();
}
else if ('+',')','#')
{}//为空串时
else{
errot;exit(0);
}//错误提示
}
F(){
if('('){
E();
if(')'){
}
else{
errot;exit(0);
}//错误提示
}
else if('i'){
matchtoken(i);
}
else{
errot;exit(0);
}//错误提示
}

  

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

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

  1. 编译原理 #02# 简易递归下降分析程序(js实现)

    // 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  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(S)是不 ...

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

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

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

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

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

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

  9. TINY语言采用递归下降分析法编写语法分析程序

    目录 自顶向下分析方法 TINY文法 消左提左.构造first follow 基本思想 python构造源码 运行结果 参考来源:聊聊编译原理(二) - 语法分析 自顶向下分析方法 自顶向下分析方法: ...

随机推荐

  1. HTML 基础(六)

    一.脚本 JavaScript 是 HTML 页面具有更强的动态和交互性 <script> 标签 <script> 标签用于定义客户端脚本,<script> 元素既 ...

  2. Maximum splitting

    Maximum splitting You are given several queries. In the i-th query you are given a single positive i ...

  3. Sqli-labs Less-58 报错注入 5次机会

    执行sql语句后,并没有返回数据库当中的数据,所以我们这里不能使用union联合注入,这里使用报错注入.但是需要注意这里只有5次机会尝试. 找表名 http://127.0.0.1/sql/Less- ...

  4. Java 中为什么不能创建泛型数组?

    之前只是知道在 Java 中不能创建泛型数组,今天翻看 <Effective Java>其中对这个部分有讲解,记录一下. 现在我们假设在 Java 中可以创建泛型数组,看看可能会发生什么情 ...

  5. 安装 elasticsearch For LINUX

    官网下载地址 https://www.elastic.co/cn/downloads/elasticsearch 选择版本为LINUX 当前版本为 es-7.6.2 用tar 命令解压 tar -zx ...

  6. STS——BootDash的报错及解决

    首先先吐槽下自己,昨晚查了两小时bug,原因在于模板引擎thymeleaf编写时,  调用th:src属性时,其中的@{}表达式,花括号忘记括回来了. 这里给我的教训就是,写代码细致一点,检查的时候优 ...

  7. Nginx知多少系列之(一)前言

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.Linux下.NET Core项目Nginx+ ...

  8. Java线程通讯方法之wait()、nofity() 详解

    Java线程通讯方法之wait().nofity() 详解 本文将探讨以下问题: synchronized 代码块使用 notify()与notifyAll()的区别 Java wait(),noti ...

  9. "字母全变大写"组件:<uppercase> —— 快应用组件库H-UI

     <import name="uppercase" src="../Common/ui/h-ui/text/c_text_uppercase">& ...

  10. 使用rem配置PC端自适应大屏

    效果如下 使得大屏不论在什么宽高比例依然能展示全部数据 安装 npm install -S postcss-pxtorem rem配置思路 原先的rem函数是能解决大部分的问题的,如果展示不全,也可以 ...