编译原理 —— 算符优先分析法
什么是算符优先分析法
- 算符优先分析法是一种简单、直观的自下而上分析法
- 算符优先分析法就是仿照算术表达式的四则运算过程而设计的一种语法分析方法。
- 这种分析方法首先要规定运算符之间(确切地说终结符之间)的优先关系和结合性质,然后借助这种关系,比较相邻运算符的优先级来确定句型的可归约串并进行归约。
算符优先文法的定义
一、算符文法的定义
- 在算符文法中,任何一个规则右部都不存在两个非终结符相邻的情况。如 AB
二、定义任意两个终结符号之间的优先关系
解释:
(1)ab两个可以同时规约,故优先级相等
(2)将R的推导式代入P的产生式中,最终也会形成如(1)中一样的P的产生式的形式,但此时需要对b先进行规约,再规约a,故a的优先级小于b的优先级
(3)同理可得,b的优先级小于a的优先级
三、算符优先文法的定义
算符优先关系表的构造
算符优先分析法借助优先关系表寻找句型的可归约串。
步骤一:为每个非终结符 A 计算 FIRSTVT(A) 和 LASTVT(A)
(1)Firstvt集合
找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
- A->a…,即以终结符开头,该终结符入Firstvt
- A->B…,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
- A->Ba…,即先以非终结符开头,紧跟终结符,则终结符入Firstvt
(2)Lastvt集合
找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
- A->…a,即以终结符结尾,该终结符入Lastvt
- A->…B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
- A->…aB,即先以非终结符结尾,前面是终结符,则终结符入Lastvt
步骤二:逐条扫描文法规则
(1)因存在 E → (E)的规则,则有=
(2)寻找终结符在左边,非终结符在右边的符号对
- +T 则 +< FIRSTVT(T)
- *F 则 *< FIRSTVT(F)
- (E 则 (< FIRSTVT(E)
(3)寻找非终结符在左边,终结符在右边的符号对
- E+ 则 LASTVT(E)>+
- T* 则 LASTVT(T)>*
- E) 则 LASTVT(E)>)
步骤三:寻找$与开始符号E的关系
(1)$=$
(2)$<FIRSTVT(E)且LASTVT(E)>$
编译原理 —— 算符优先分析法相关推荐
- 算符优先分析法代码 java_编译原理——算符优先分析文法(附源代码)
1 源代码2 模块一:3 /****************#include"firstVT_lastVT.h"************************/ 4 5 //程序 ...
- 编译原理(五)自底向上分析之算符优先分析法
自底向上分析之算符优先分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本过程 1. 一般方法:采用自左向右地扫描和分析输入串,从输入符号串开始,通过反复查找当前句型的句 ...
- 编译原理 词法分析 算符优先分析法
编译原理 词法分析 算符优先分析法 实验目的 加深对语法分析器工作工程的理解,加强对算符优先分析法实现语法分析程序的掌握:能够采用一种编程语言实现简单的语法分析程序:能够使用自己辨析的分析程序对简单的 ...
- 编译原理系列之五 自底向上优先分析(2)-算符优先分析法
算符优先分析法 1.基本概念 算符文法(OG):文法G中没有形如A=>···BC···的产生式,其中B.C为非终结符,则G为算符文法(operator grammar). 也就是说产生式的右部不 ...
- 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解
语法分析(自顶向下 / 自底向上) 自顶向下 递归下降分析法 这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用. LL(1)分析法 又称预测分析 ...
- 编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解
语法分析(自顶向下/自底向上) 自顶向下 递归下降分析法 这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用. LL(1)分析法 又称预测分析法, ...
- 算符优先分析法-思路方法在这里
为了方便,记录一下,因为本人也正在学编译原理,以便后续的学习复习,以下是自己整理的. 编写一个算符优先分析程序,能实现以下功能: 1.输入文法,判断是否为算符文法: 2.构造并输出该文法的每个非终结符 ...
- 编译原理简单优先分析算法
简单优先分析算法 编译原理简单优先分析算法是一种自下而上的分析算法,本例是编译原理第三版何炎祥中一个简单优先分析算法的例子,未给出分析过程分析代码,读者可以参考我的语法分析器中输出代码,写出此算法的输 ...
- 【编译原理】自下而上分析法 C++
对于文法 E E + T | E – T | T T T * F | T / F | F F (E) | i 使用自下而上分析法的一种来进行构造算法 目前学过的自下而上分析法有 1.算符优 ...
最新文章
- Mac下PHP7.1+Nginx安装和配置
- java 基础 --静态
- linux上点时间延时,Linux上时间和定时器
- Spring : @Qualifier 注解
- 语义分割之评价指标MIoU介绍
- js替换和全部替换字符串标点
- 【深度学习】【ICLR2019】DARTS代码解读
- python计算纪念日相关
- MAC安装STAF详解
- sms 短信服务说明
- 面阵相机以及相机选型公式
- Net2 A Graph Attention Network Method
- 2021最新chrome浏览器与chromedriver版本对照表
- bind 用法及简单实现原理
- linux申请端口,linux申请端口申请书
- 学Python基础面向对象看这一篇文章就够了【全网首推】
- 基于MATLAB Simulink的三相电压型开环SPWM整流器仿真模型
- 神经系统图 基本结构图,神经系统分类和组成图
- 28个linux命令行神器
- 用等价类和边界值法设计NextDate问题的测试用例并进行测试,具体要求如下:NextDate是一个有3个变量(月份、日期和年)的函数。函数返回输入日期后一天的日期。变量月份、日期和年都具有整数值
热门文章
- 电脑添加200个虚拟IP,用Jmeter实现IP欺骗
- Linux上JMeter使用IP欺骗
- 三种移动处理器(ARM, Intel和MIPS)之间的主要区别(转)
- chrome不用flash,播放流视频
- C++ 推箱子,中配版,支持玩家自己创造地图(无图形库)
- unity android 在后台运行_Unity学习—资源管理概览
- 桌面上的软件图标是白板_是时候结束对软件工程师的白板采访了
- 基于python的WEIBO热点话题检测
- linux编写E325:ATTENTION错误
- 正弦函数如何变成声音