能不能分析下这种自上而下的语法分析

【图文】编译原理4自顶向下的语法分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理4自顶向下的语法分析
&&天津大学编译原理导论
大小:2.24MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢编译原理(2)
经过词法分析的程序,我们能保证词法分析器识别了下面几种单词符号:
关键字:if、else、int、double、…
标识符:函数名、变量名、数组名
界符:各种括号
运算符:+、-、*、/、…
常数:整形、布尔型…
接下来进行的语法分析我们需要保证它的语法是正确的,比如下面的语句在词法分析时是正确的:
int double 2;
词法分析程序会将语句判断为:
词法分析是没有错误的,但是明显它是一个有语法错误的语句。接下来要说的语法分析叫做自上向下分析的方法。它的目的就是将我们的一个输入语句看能否从开始符号按照语法规则推导出来,如果可以,那它就是一个合法的语句。
自上而下分析是对于任何的输入串,从开始符号建立一棵语法树,一旦能建立一棵唯一的语法树,那对于输入的语句,只要能通过语法树推导出来,那么就是合法的,建立语法树的过程是一个不断尝试的过程,因为在匹配的过程中,由于一个非终结符可能对应不同路径,比如T-&**|*,那么如果第一次选择用T-&**将A替换,一旦不能满足条件,我们需要回溯,再去走T-&*,这样的回溯可能在别的非终结符号中进行的更多,为了防止这种现象,我们希望通过某种途径直接建立唯一的语法树,让语句在判断过程中走它规定好的路线,即不会产生任何回溯,路线唯一,我们需要在构建语法树之前完成这两个步骤:
一:消除左递归
设想如果存在下面的式子:
P=&Pa (式子1)
那这个分析过程遇到P会一直递归深入,永远不会结束。我们的目的是:没有蛀牙(别闹,没有左递归),那怎么修改呢?举个栗子:
P-&Pa|b(式子2)
p`-&ap`| e
备注:e表示空
为什么可以这么转换呢?因为上面的式子2中通过P可以最终得到的式子为baaaaa...,通过下面的式子3可以得到的最终式子也是baaaaa...,所以,显而易见。我们可以用他们来替换,替换之后就消除左递归了。
二:消除回溯
消除回溯必须达到:对文法的任何非终结符号,让它去匹配输入串的时候,能够根据它面临的输入符号准确的让一个候选产生式去工作。
这时候就需要引入First集和Follow集的概念:
First集:对于一个文法中所有的非终结符号,它能推出的所有直接终结符号。
eg:F-&(E)|i
First(F) 为:{
Follow集:
Follow集的计算参见这篇博客:
通过以上两个步骤我们我们可以确定一个LL(1)文法,即消除了左递归和回溯的文法,之后我们可以根据没有左递归的文法和First集合构建预测分析表。然后就可以分析语法了。栗子以后在补吧…
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:89357次
积分:2488
积分:2488
排名:第14681名
原创:150篇
评论:83条
(3)(10)(2)(12)(2)(6)(10)(7)(8)(5)(7)(4)(1)(5)(11)(8)(9)(4)(18)(6)(6)(11)
&& &&&& &&
&& & &&&&& &&
&& & &&&&& & &
&& & &&&&& & &
& & &&& & &&
&& & &&&&&&&
& & &&& & &&扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
请分析下面句子中的语法问题the Family and Medical Leave Act of 1993 (entitles you to up to 12 weeks) per year of time off介词可以和介词连用吗?请详细分析一下这个句子—特别是括号内()的语法,是什么?
无限专用1796
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
主语:the Family and Medical Leave Act of 1993 谓语:entitles宾语:you状语:to up to 12 weeks状语:per year of time off(每年的离开时间)1993年的《家庭医疗休假法》(Family and Medical Leave Act)明文...
to up to 不是介词和介词连用吗?这样可以?
up to+n(up to是一个词组:结构是副词+介词:这是可以与to连用的。)
women, the figure could rise from 26% to up to 43%.
而女性,数据将会由26%上升到43%。
为您推荐:
其他类似问题
可能中间有省略吧。下面是找到的中文翻译:1993年的《家庭医疗休假法》(Family and Medical Leave Act)明文规定,你每年可以获得最多12周的假期。所以up前面可能省略了“获得”这个词。“up to 12 weeks”是指“最多12周”。
你想复杂了。entitles you to up to 12 weeks这句话里 实际上是entitle sb. to sth./do sth.,就是 entitles you to 12 weeks
per year of time off,这里up to是修饰后面的12 weeks,多达十二周的意思
扫描下载二维码扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
at what time of year did ken visit paris这句话是从句吗为什么这样说 能不能给分析下语法
韩晓柒4857
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
这句话是简单句 是特殊疑问句at what time of year引导 特殊疑问句 并作句子中的时间状语did是助动词 ken是主语 visit是谓语paris是宾语
为您推荐:
扫描下载二维码&>&&>&课程资源&>&C/C++&>&语法分析程序的设计与实现
语法分析程序的设计与实现
上传大小:664KB
一:实验内容:
编写语法分析程序,实现对算术表达式的语法分析,要求所分析的算术表达式由如下的文法产生。
◆E-&E+T|E-T|T
◆T-&T*F|T/F|F
◆F-&id|(E)|num
二:实验要求:
在对表达式进行分析的同时,输出所采用的产生式。
可以采用多种方法
◆编写递归调用程序,实现自顶向下的分析。
◆编写LL(1)语法分析程序,要求:
◇编程实现算法4.2,为给定的文法自动构造预测分析表
◇编程实现算法4.1,构造LL(1)预测分析程序,
◆编写语法分析程序,实现自底向上的分析,要求:
◇构造识别所有活前缀的DFA
◇构造LR分析表
◇编程实现算法4.3,构造LR分析程序
◆利用yacc自动生成语法分析程序,调用LEX自动生成的词法分析器程序...展开收缩
综合评分:4.5(22位用户评分)
所需积分:
下载次数:101
审核通过送C币
VS2010趣味编程视频教程
创建者:ouyongke
OMNET学习资料
C/C++面试笔试汇总
创建者:fireblue1990
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有17条
非常好的资源,内容详细,我的实验报告刚好就是,谢谢楼主!
虽然不是很懂,不过谢谢了
嗯 可以交作业了
很详细具体。。
还是有些不太懂...不过还是不错了。
非常感谢,可以运行
很好,可运行
代码不错,值得参考
很好,帮大忙了,谢谢楼主分享
很好,代码可运行。。。
上传者其他资源上传者专辑
支持远程访问的超市管理系统
课程资源热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&vip年卡&4000万程序员的必选
语法分析程序的设计与实现
会员到期时间:剩余下载次数:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200次免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:

我要回帖

更多关于 自顶向下语法分析方法 的文章

 

随机推荐