精华内容
下载资源
问答
  • 构造了该方法实现中的关键数据结构 同时阐述了依据此数据结构编程实现的思路 结果表明:该方法可以正确 准确地识别指定文法的句子">讨论了编译原理中理解和实现都比较困难而又在语法分析中占重要位置的LL 1 预测分析...
  • LL1文法

    2008-06-02 12:36:39
    C语言写的LL1文法,编译原理
  • LL ( 1 )文法定义可知,若文法中含有左递归或含有公共左因子,则该文法不是 LL ( 1 )文法,因此,对某些非 LL ( 1 )文法而言,可通过消除左递归和反复提取公共左因子对文法进行 等价变换,将其改造为 LL ( 1 )文法。 ...

    某些非 LL ( 1 )文法到 LL ( 1 )文法的改写

    前面已经指出,构造确定的自上而下分析程序要求给定语言的文法必须是 LL ( 1 )文法,但是,并不是每个语言都有 LL ( 1 )文法。由 LL ( 1 )文法定义可知,若文法中含有左递归或含有公共左因子,则该文法不是 LL ( 1 )文法,因此,对某些非 LL ( 1 )文法而言,可通过消除左递归和反复提取公共左因子对文法进行
    等价变换,将其改造为 LL ( 1 )文法。

    这里所说的提取公共左因子是指当文法中含有形如 A → αβ 1 | α β 2 | … | α β n的规则,可将它改写成

    A → αA'
    A' → β 1 | β 2 | … | β n
    

    若在 β1 ,β 2 ,…, β n中仍含有公共左因子,这时可再次提取,这样反复进行提取,直到引进新非终结符的有关规则再无公共左因子为止。

    例如,对例 4.1 中的文法

    S → aAb
    A → de | d
    

    由前面已知该文法是非 LL ( 1 )文法,该文法无左递归,利用提取公共左因子的方法对其进行改写,得到

    S → aAb
    A → dA'
    A' → e | ε
    

    不难验证改写后的文法为 LL ( 1 )文法。

    【例 4.8 】设有文法 G [ S ]:

    S → ad | Ae
    A → aS | bA
    

    对于非终结符 S 的规则,因有

    SELECT ( S → ad ) ∩ SELECT ( S → Ae ) = { a } ∩ { a , b } ≠ Ø
    

    故它不是一个 LL ( 1 )文法。由于非终结符 S 的两个右部的公共左因子是隐式的,因此,在对 S的两条规则提取公共左因子之前,对 S 右部以非终结符 A 开头的规则,用 A 的两条规则进行相
    应替换,得到

    S → ad | aSe | bAe
    A → aS | bA
    

    对 S 提取公共左因子得

    S → bAe | aS'
    S' → d | Se
    A → aS | bA
    

    显然,改写后的文法是 LL ( 1 )文法。

    应当指出的是,并非一切非 LL ( 1 )文法都能改写为 LL ( 1 )文法。
    例如,对于文法

    S → Ae | Bd
    A → aAe | b
    B → aBd | b
    

    对于 S 的规则,因有

    SELECT ( S → Ae ) ∩SELECT ( S → Bd ) = { a , b } ∩ { a , b } ≠ Ø
    

    故它不是一个 LL ( 1 )文法。对于 S 的两条规则,可先将非终结符 A , B 用相应规则右部进行替换,得到

    S → aAee | be | aBdd | bd
    A → aAe | b
    B → aBd | b
    

    对 S 提取公共左因子后,得

    S → aS' | bS″
    S' → Aee | Bdd
    S″ → e | d
    A → aAe | b
    B → aBd | b
    

    显然,它仍不是一个 LL ( 1 )文法,且不难看出无论将上述步骤重复多少次都无法将它改写为 LL ( 1 )文法。

    展开全文
  • 本程序的所用的存储结构都是string...最终有三种结果,一种是是LL1文法,一种是不是LL1),但是经过转换变成了LL1),还有一种是经过转换也无法变成LL1)。 输入文本格式样例: A A->ad A->Bc B->aA B->bB
  • LL1文法分析

    2015-06-27 19:40:15
    (1)LL1文法的判定(假设文法符合的First和Follow集未知)要求:输入文法,输出判定该文法是否是LL1)的。根据select集,预测分析表来判定的。
  • LL1文法

    2018-07-03 10:47:48
    通过编程判断该文法是否为LL(1)文法; 计算出文法的First() 、Follow() 构造相应文法的预测分析表 对某个输入句子进行语法分析
  • LL(1) 文法 程序

    2012-11-16 21:04:57
    LL(1) 文法 程序
  • 某些 非LL(1)文法LL(1)文法 的等价变换 1.提取左公共因子 2.消除左递归(直接左递归、间接左递归) 不确定的自顶向下分析思想 确定的自顶向下分析方法 1.递归子程序法 2.预测分析法[判别LL(1)文法;构造预测分析...

    本文要点

    1. 理解 “能使用自顶向下分析技术的文法必须是LL(1)文法
    2. LL(1)文法的充要条件
    3. LL(1)文法的判别
    4. 某些 非LL(1)文法LL(1)文法 的等价变换
      1.提取左公共因子
      2.消除左递归(直接左递归、间接左递归)
    5. 不确定的自顶向下分析思想
    6. 确定的自顶向下分析方法
      1.递归子程序法
      2.预测分析法[判别LL(1)文法;构造预测分析表;分析输入串]
      在这里插入图片描述

    4.1 确定的自顶向下分析思想

    主要思想:
    从文法的开始符号出发,如何根据当前的单词符号
    唯一地确定选用哪个产生式来替换相应的VN向下推导。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.2 LL(1)文法的判别

    判别步骤:

    1. 求出能推出ε的非终结符
    2. 计算FIRST集
    3. 计算FOLLOW集
    4. 计算SELECT集
    5. 判别是否是LL(1)文法
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    4.3 某些非LL(1)文法到LL(1)文法的等价变换

    在这里插入图片描述

    4.3.1 提取左公共因子

    在这里插入图片描述
    在这里插入图片描述

    4.3.2 提取隐含的左公共因子

    在这里插入图片描述

    4.3.3 不能在有限步骤内提取完左公共因子的文法

    在这里插入图片描述

    4.3.4 消除左递归

    在这里插入图片描述

    4.3.5 消除直接左递归

    在这里插入图片描述

    4.3.6 消除间接左递归

    在这里插入图片描述

    4.3.7 消除文法中一切左递归

    在这里插入图片描述
    在这里插入图片描述

    4.4 确定的自顶向下分析方法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    构造预测分析表的方法:
    对每个VT或“#”用符号a表示。
    若a∈SELECT(A–>α),则把A–>α放入M[A,a]中。
    (所有空白的M[A,a]表示出错。)
    在这里插入图片描述
    在这里插入图片描述

    4.5 不确定的自顶向下分析思想

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • LL(1)文法判断程序

    2018-05-11 22:02:39
    1. 实验内容 1、 让计算机接受一个文法,示例如(仅供参考): G[S] 为: ...2、 编程实现对上述文法是否是LL(1)文法的判断,是则给出肯定回答,否则给出否定回答。 3、判别是否是LL(1)文法 。。。。。。
  • ll(1)文法 编译原理

    2015-01-14 10:50:40
    自己写的ll1文法,帮助初学者更好的理解ll1文法的分析机制。
  • LL1文法程序

    2014-07-20 11:44:00
    LL1文法分析程序,基于Win32控制台程序,编译原理课程作业
  • & —〉 for语句|while语句|do while语句||& —> return语句|break语句|continue语句 —> 丨丨 —> int丨char丨double丨float丨long —> 丨〈数字〉 〈==〉 S S —> AS1 S1 —> S1S2 S2 —> A|B|& A —> a|b|c|……y|...

    —〉 |

    —〉 | |

    —〉 #include

    —〉 stdio.h丨stdlib.h丨string.h

    —〉

    —〉 struct

    —〉

    —〉|||&

    —〉||||&

    —〉 ||||&

    —〉 =A/A=

    A —> &|+|-

    —> 〉| < | 〉=| <=

    —〉 + | - | * | /

    —〉 if else语句|switch语句||&

    —〉 for语句|while语句|do while语句||&

    —> return语句|break语句|continue语句

    —> 丨丨

    —> int丨char丨double丨float丨long

    —> 丨〈数字〉

    〈==〉 S

    S —> AS1

    S1 —> S1S2

    S2 —> A|B|&

    A —> a|b|c|……y|z

    B —> 0|1|2|3|4|5|6|7|8|9

    —> a|b|c|……y|z

    〈==〉 S

    S —> AS1

    S1 —> S1AS2

    S2 —> &|0

    A —> 1|2|3|4|5|6|7|8|9

    原文:http://www.cnblogs.com/swxvico/p/6188522.html

    展开全文
  • LL_1文法分析器

    2008-06-01 14:12:15
    LL_1文法分析器。支技用户文法输入,LL_1文法判断,分析表输出,用户字符串分析。
  • 编译原理实验八:非LL(1)文法LL(1)文法的转换,zip文件里包含实验报告和源代码两部分。
  • 根据某一文法编制调试 LL1 )分析程序,以便对任意输入的符号串进行分析。 构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。 分析法的功能是利用LL1)控制程序根据显示栈栈顶内容、...
  • LL(1)文法分析

    2012-11-11 16:05:51
    从文件读取能实现字符串分析的LL1文法,ifstream infile("C:/Users/lenovo/Desktop/文法txt");ifstream infil("C:/Users/lenovo/Desktop/测试.txt");找到其中这两段代码,改为自己的文档路径,其中文法...
  • LL(1)文法的性质 无二义性 不含左递归 不含公共左因子 1.消除左递归 简单讲就是将左递归转变成右递归 例: 2.提取左因子 例: 非LL(1)文法转变成LL(1)后还需判断一下是否为LL(1) 详见求FIRST()FOLLOW()以及LL...

    LL(1)文法的性质

    • 无二义性
    • 不含左递归
    • 不含公共左因子

    1.消除左递归

    在这里插入图片描述
    在这里插入图片描述

    简单讲就是将左递归转变成右递归

    例:

    在这里插入图片描述

    2.提取左因子

    在这里插入图片描述

    例:

    在这里插入图片描述

    非LL(1)文法转变成LL(1)后还需判断一下是否为LL(1)

    详见求FIRST()FOLLOW()以及LL(1)文法的判别—编译原理

    展开全文
  • 编译原理LL(1)文法.rar

    2020-01-05 10:06:45
    python编写的带图形界面LL(1)文法,直接运行.py文件即可,含测试用例
  • LL(1)文法自动设计

    2011-06-08 01:25:37
    任意输入LL(1)文法,自动构造LL(1)分析表并生成相应的语法分析程序,实现LL(1)分析过程;能对输入串进行语法分析,判断其是否符合文法
  • LL1文法实验.rar

    2021-02-20 18:01:48
    C++实现LL1文法1)在def.ll1中填写文法规则; 2)在test.free中填写识别字符串(会转换为token序列); 3)会打印出FIRST、FOLLOW和预测表; 4)会检测出错位置; 5)文法不能出现左递归和二义性;
  • ll1analyzer LL(1)文法语法分析程序 描述博客:
  • LL(1)文法分析器

    2012-12-21 23:50:36
    LL(1)文法分析器 LL(1)文法 、first集、follow集、分析表、匹配过程、分析步骤 题目: 预测分析程序的实现 设计内容及要求: 对文法 G: E→E+T|T 按教材P.76表4.1构造出G的预测分析程序, T→T*F|F 程序显示输出...
  • LL1文法判定

    2013-05-04 20:51:45
    c实现的LL1文法的判定,按书上的步骤一步步实现的,文法支持手动输入。
  • LL1文法判定器

    2010-05-24 18:06:06
    根据判断一个文法LL(1)文法的三个条件,逐一实现其判别条件的算法实现。 满足是LL(1)文法的三个条件: (1)文法不含有左递归 (2)对于文法中每一个非终结符A,若它存在某个候选首符 集两两不相交,即,若A→α1|α2|...
  • 编译原理大作业 LL1文法实现完整代码 + 报告 !!! 求出能推出ε的非终结符、计算FIRST集、计算FOLLOW集、计算SELECT集、构造预测分析表、判断LL(1)文法 1. 给定无左递归和无回溯的文法,计算FIRST集合和...
  • LL(1)文法是消除左递归和回溯之后的文法,这里是利用栈将文法移进和匹配的过程显示出来,但是输出是随意写的,可以稍作调整,让输出更加的美化!
  • 编译原理LL1文法

    千次阅读 2017-04-20 15:32:21
    这里给出具体的实现要求1、将一个可转换非LL1文法转换为LL1文法,要经过两个阶段,1)消除文法左递归,2)提取左因子,消除回溯。 2、提取文法左因子算法: 1)对文法G的所有非终结符进行排序 2)按上述...
  • LL(1)文法的判别

    2014-05-28 22:25:39
    LL(1)文法的判别,包括了非终结符的FIRST集,每个产生式右部非FIRST集,非终结符的FOLLOW集以及每个产生式的SELECT集
  • LL(1)文法的实现

    2012-08-23 16:25:14
    LL1 文法的实现 主文件为LL1forwin 可以读取文法操作 可读取的文件分别为1.txt 2.txt ... 简单易懂 MFC制作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,856
精华内容 1,542
关键字:

ll(1)文法