文法

文法和语言分为4类。
0型文法:最大类,包含1、2、3型文法。
1型文法:对0型文法来说,所有的产生式的右边的字符长度都要大于左边的字符长度。
2型文法:所有的产生式左边都只有一个字符。
3型文法:在满足2型文法的基础上,每个产生式具有以下形式:A–>a(终结符)、A–>a(终结符)B(非终结符),或者具有以下形式:A–>a(终结符)、A–>B(非终结符)a(终结符)。

例:
S–>aS
S–>aA
A–>bA
A–>bB
B–>cB
B–>c
这个就是3型文法。
但是
S–>aS
S–>aA
A–>bA
A–>bB
A–>Ac
就不是3型文法,因为它既是左线性,又是右线性

算符优先文法

算符文法:任何产生式的右部都不含两个相邻的非终结符。

定义算符优先文法之前先定义终结符的关系。
在产生式中,如果R–>…ab…或者R–>…aQb…,那么这两个终结符a和b的关系为:a=b,等于号中间还有个点,但是不知道怎么打上去,所以后面都用等号来代替书上的符号。
在产生式中,如果R–>…aQ…,然后又有Q–>b…或者Q–>Cb…这样的情况存在,那么这两个终结符a和b的关系为:a<b,小于号中间还有个点,所以后面都用小于号来代替书上的符号。
在产生式中,如果R–>…Qb…,然后又有Q–>…a或者Q–>…aC这样的情况存在,那么这两个终结符a和b的关系为:a>b,大于号中间还有个点,所以后面都用大于号来代替书上的符号。
其实终结符的关系,画出语法树就很容易看出来,如果一个终结符的深度大于另一个终结符的深度,那么很可能就是深度越深的那个终结符关系大于深度较浅的终结符关系。后面我们定义了FIRSTVT和LASTVT就很容易求得并理解这些关系了。
算符优先文法:满足算符文法的情况下,任意一对终结符的关系(a,b)最多只有一种情况。

如何求一个非终结符的FIRSTVT?
很简单,对于一个非终结符T来说,有产生式是这样的T–>Qa…或者T–>a…,那么就有FIRSTVT(T)={a}集合并上FIRSTVT(Q)FIRSTVT(T)=\{a\}集合并上FIRSTVT(Q)FIRSTVT(T)={a}集合并上FIRSTVT(Q),即如果FIRSTVT(Q)={b,c}FIRSTVT(Q)=\{b,c\}FIRSTVT(Q)={b,c},那么就有FIRSTVT(T)={a,b,c}FIRSTVT(T)=\{a,b,c\}FIRSTVT(T)={a,b,c}
如何求一个非终结符的LASTVT?
很简单,对于一个非终结符T来说,有产生式是这样的T–>…a或者T–>…aQ,那么就有LASTVT(T)={a}集合并上LASTVT(Q)LASTVT(T)=\{a\}集合并上LASTVT(Q)LASTVT(T)={a}集合并上LASTVT(Q),即如果LASTVT(Q)={b,c}LASTVT(Q)=\{b,c\}LASTVT(Q)={b,c},那么就有LASTVT(T)={a,b,c}LASTVT(T)=\{a,b,c\}LASTVT(T)={a,b,c}

然后我们可以根据FIRSTVT和LASTVT求得算符优先关系表。
第一步:求出所有非终结符的FIRSTVT和LASTVT。
第二步:找出所有的产生式,然后根据上面的规则求得所有终结符的关系。
第四步:对额外的语句#S#,进行求解关系。其中S是起始非终结符。
第三步:构建算符优先关系表。如下的样子:
对于算符优先分析过程的求解,会给你一个式子,然后你必须根据这个式子最终转化为起始的非终结符。
根据以下的形式和终结符的关系即可得出,如下的样子:

编译原理基本定义(文法、算符文法、算符优先文法、算符优先关系表、算符优先分析过程)相关推荐

  1. 【20200422】编译原理课程课业打卡十七之求解文法FirstVTLastVT构造文法算符优先关系表

    [20200422]编译原理课程课业打卡十七之求解文法FirstVT&LastVT&构造文法算符优先关系表 一.课业打卡十七之求解文法FirstVT&LastVT&构造 ...

  2. 【编译原理】-- 第二章(一)(文法和语言的定义、递归规则与递归文法、例题)

    目录 形式化方法 语言的定义可采用下列三种方法 一.文法和语言的定义 1.字母表和符号串的基本概念和术语 (1)字母表 (2)符号串 (3)字母表∑上的符号串的递归定义. (4)符号串的前缀.后缀和字 ...

  3. 编译原理陈意云3-20 (a) 证明下面文法 S→AaAb|BbBa A→ε B→ε 是LL(1)文法,但不是SLR(1)文法。

    思路:依次判断是否为LL(1)文法和SLR文法即可 证明: (1)首先该文法无左递归存在,没有公共左因子. 其次:对于S→AaAb|BbBa FIRST(AaAb)={a} FIRST(BbBa)={ ...

  4. 【编译原理】-- 第二章(三)(文法的化简改造、无用产生式、产生式的消除、文法的其他表示方法、例题)

    目录 一.文法的化简与改造 1.文法的实用限制 (1)不含无用产生式 (2)不含有害规则 (3)无用符号和无用产生式的消除 2.产生式的消除 算法3: 算法4:ε不属于L(G) 算法5:ε属于L(G) ...

  5. 编译原理基本定义(短语、直接短语、句柄、素短语、最左素短语)

    一般先根据句型写出语法树,然后再根据语法树进行求解. 举个例子: 先画出语法树(最左推导): 短语:在语法树中,先找出所有的非终结符,然后用叶子节点去替换他们,最后得到的集合就是短语的集合. 这里的非 ...

  6. 算符优先分析法代码 java_编译原理——算符优先分析文法(附源代码)

    1 源代码2 模块一:3 /****************#include"firstVT_lastVT.h"************************/ 4 5 //程序 ...

  7. 编译原理 词法分析 算符优先分析法

    编译原理 词法分析 算符优先分析法 实验目的 加深对语法分析器工作工程的理解,加强对算符优先分析法实现语法分析程序的掌握:能够采用一种编程语言实现简单的语法分析程序:能够使用自己辨析的分析程序对简单的 ...

  8. 【编译原理】自上而下分析与LL文法

    初入语法分析. 语法分析是编译原理的核心部分,这一点从语法分析在编译原理教科书中所占的篇幅可见一斑,不论是陈火旺老师的<编译原理>还是Ullman等人的"龙书".语法分 ...

  9. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

最新文章

  1. 企业管理做不好的根源!「管理智慧」
  2. java 网络io详解_Java网络socket编程详解
  3. 【渝粤教育】 国家开放大学2020年春季 2411中国现代文学 参考试题
  4. profile、服务、特征、属性之间的关系
  5. Java高级语法笔记-接口(interface)
  6. 【Cinemachine智能相机教程】VirtualCamera(四):Noise属性
  7. 架构探险笔记11-与Servlet API解耦
  8. K-meas聚类算法极简介绍
  9. ATL 工程下添加右击菜单
  10. 记录自定义view的基本使用
  11. cocos2d-x学习资源整理(持续更新)
  12. 使用EXCEL进行数据分组分析法
  13. 8.系统研发中的领导意志
  14. leetcode 1313. Decompress Run-Length Encoded List(python)
  15. 爬虫采集数据遇到验证码怎么解决?
  16. java equals和==的区别
  17. Matlab 在线版 —— 科研人员的福音!无需下载安装,可计算可作图
  18. 平板电脑3C认证的重要性,为什么要3C认证?Ⓠ欢Ⓠ迎3来8网3赚5喔0
  19. wifi6 增加穿墙能力详解
  20. LAMP兄弟连38期激情开班

热门文章

  1. 箱体图Boxplot及Python绘制方法
  2. MTK65XX平台充电调试总结 (转载)
  3. 企业的护城河与个人的护城河 更新(2019-05-11)
  4. 2022年全球气候金融产品研究报告
  5. 日本語トレーニング45
  6. 用Python爬取购物节当天热门商品销量数据,看看大家喜欢什么
  7. DELL笔记本BIOS密码破解
  8. html5手指滑动图片放大缩小,移动端如何实现图片通过捏合手势放大缩小呢?
  9. 华为鸿蒙2.0 pc,华为鸿蒙工具下载-华为鸿蒙v2.0正式电脑下载 - 91单机网
  10. 【题解】P3975 [TJOI2015]弦论 后缀自动机