LL(1)语法分析构造表的设计--正文

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

安徽工程大学课程设计(论文)第1页《编译原理课程设计》任务书1、本课题的目的及意义课程设计实践对学生巩固所学基础专业课程知识、进行编译系统基本技能训练、培养实践动手能力,从而掌握编译系统的基本工作原理、基本方法和基本开发技术,最终达到具有一定的编译系统的实际开发能力有重要意义。通过课程设计,主要达到以下目的:1.帮助学生深入理解编译原理的有关理论和巩固编译原理相关知识。2.巩固学生学习的编译原理、程序设计语言、数据结构等课程的基础知识,训练学生分析和解决编译系统的相关问题的能力,提高学生的综合素质。3.从软件工程的角度来看,《编译原理》课程设计是一个很好的实例,可以训练学生软件设计的能力以及编码调试能力。2、本课题任务的主要内容本课程设计主要内容包括以下几点:1、根据选定的题目,查阅资料,熟悉相关理论、方法;(1)掌握文献检索方法,以获得编译系统开发技术等相关资料;(2)学习并熟练使用一种4GL开发平台(如VC++、Java、Dephi、PB、VB等);2、分析问题,确定系统逻辑结构;3、确定系统所需模块及模块结构,并用流程图描述各模块;4、编码及调试程序;5、撰写课程设计说明书。3、提交的成果1、一份符合课程设计说明书撰写规范的课程设计说明书。2、一套系统原型。安徽工程大学课程设计(论文)第2页LL(1)语法分析构造器的设计指导教师王勇作者陈慧娟摘要语法分析的主要任务是接收词法分析程序识别出来的单词符由某种号串,判断它们是否语言的文法产生,即判断被识别的符号串是否为某语法部分。一般语法分析常用自顶向下方法中的LL(1)分析法,采用种方法时,语法分程序将按自左向右的顺序扫描输入的的符号串,并在此过程中产生一个句子的最左推导,即LL(1)是指自左向右扫描,自左向右分析和匹配输入串。我们使用VC++作为前端开发工具,在分析语法成分时比较方便直观,更便于操作。运行程序的同时不断修正改进程序,直至的到最优源程序。关键字语法分析文法自顶向下分析LL(1)分析最左推导AbstractGrammaticalanalysisofthemaintaskswastoreceivelexicalanalysisproceduretoidentifythewordsfromawebsite,string,andjudgewhethertheyhaveagrammarofthelanguage,thatis,judgingbytheseriesofsymbolstoidentifywhetheragrammarpart.Generalsyntaxanalysiscommonlyusedtop-downmethodsofLLanalysis,usingmethods,Grammarhourswillbefromtheproceduresoftheorderleft-to-rightscanninginputstringofsymbols,andintheprocessproducedoneofthemostleftthesentenceisderived,LLisscannedfromlefttoright,Fromlefttorightanalysisandmatchinginputstrings.Afteranalysis,weuseVC++asafront-enddevelopmenttoolfortheanalysisofsyntaxingredientsmoreconvenientvisual,moreeasytooperate.Operationalproceduresatthesametimeconstantlyimprovingprocedures,untilthesourceofoptimal.KeyWordsGrammaticalanalysisgrammarTop-downanalysisLL(1)AnalysisMostleftDerivation安徽工程大学课程设计(论文)第3页目录引言第1章概述……………………………………………………………………51.1编写目的…………………………………………………………………51.2项目背景…………………………………………………………………51.3软件定义…………………………………………………………………61.4开发环境…………………………………………………………………6第2章需求分析……………………………………………………………72.1问题陈述…………………………………………………………………72.2功能要求…………………………………………………………………72.3数据流图…………………………………………………………………8第3章设计任务分工……………………………………………………103.1小组的任务分工…………………………………………………………103.2本人主要工作……………………………………………………………10第4章系统设计……………………………………………………………114.1总体设计…………………………………………………………………114.1.1LL(1)文法改造和源程序预处理…………………………………114.1.2LL(1)文法的判别、消除左公因子、消除左递归………………144.1.3预测分析器的构造………………………………………………164.1.4构造生成LL(1)语法树……………………………………………184.2详细设计………………………………………………………………21第5章运行与测试结果……………………………………………………295.1测试数据……………………………………………………………………295.2界面实现情况………………………………………………………………29结论与展望………………………………………………………………………30参考文献…………………………………………………………………………31致谢…………………………………………………………………………………32安徽工程大学课程设计(论文)第4页引言编译器的构造工具是根据用户输入的语言的文法,编译器的构造工具可以生成程序来处理以用户输入的文法书写的文本。随着计算机应用范围的扩大,在软件自动生成,文档处理,特定专业的语言等领域,编译器的构造工具这一技术显得越来越重要。一个编译程序在对某个源程序完成了词法分析工作之后,就进入语法分析阶段,分析检查源程序是否是语法上正确的程序,并生成相应的内部中间表示供下一阶段使用。程序设计语言是一般形式语言的特例,程序语法正确性的检查正是语法句子的识别,语法分析问题也就是句型识别问题。按照识别句子时语法树建立的方式,有自顶向下与自底向上两大类分析技术。本课程设计讨论自顶向下的情况。本次课程设计所做的工作是用VC要建立一个针对LL(1)文法的编译器的编译器。本文既可以以定义好的文法书写的文件作为输入,其中包括语法及语义动作,鉴于输入文件的所用的文法可以用LL(1)分析,于是对输入的文件用递归下降的分析方法在内存中建立它的存储结构,然后分别计算所输入的文法的非终结符号是否可以生成空,每个非终结符号的first集合,每个非终结符号的follow集合,以及每个规则的predict集合,接着判断任意一个非终结符号的任意两个规则的Predict集的交集是不是都为空,如果是则输入文法可以用递归下降法分析,否则不可以,用户应该对所输入的文法作适当的修改,使其满足LL(1)文法分析的要求,。如果所输入的文法可以用递归下降法分析,生成相应文法的语法分析程序。也可以自行添加文法,本课程设计有根据相应文法自动生成分析表和语法树,并将分析信息和结果保存到一个外部文件中的的功能,能灵活实现语法编译器的相应功能。安徽工程大学课程设计(论文)第5页第1章概述1.1编写目的语法分析器通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。本次课程设计所做的工作是用VC要建立一个针对LL(1)文法的编译器的编译器。本文既可以以定义好的文法书写的文件作为输入,其中包括语法及语义动作,鉴于输入文件的所用的文法可以用LL(1)语法分析,根据相应文法自动生成分析表和语法树,并将分析信息和结果保存到一个外部文件中的的功能,能灵活实现语法编译器的相应功能。1.2项目背景编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序。由于早期的机器语言、汇编语言编写起来不容易、又枯燥无味,所以开发一种更类似数学定义和自然语言的简洁形式来编写程序的操作,应与任何机器无关的编译器十分重要。编译器的构造工具是根据用户输入的语言的文法,可以生成程序来处理以用户输入的文法书写的文本。随着计算机应用范围的扩大,在软件自动生成,文档处理,特定专业的语言等领域,编译器的构造工具这一技术显得越来越重要。一个编译程序在对某个源程序完成了词法分析工作之后,就进入语法分析阶段,分析检查源程序是否是语法上正确的程序,并生成相应的内部中间表示供下一阶段使用。程序设计语言是一般形式语言的特例,程序语法正确性的检查正是语法句子的识别,语法分析问题也就是句型识别问题。按照识别句子时语法树建立的方式,有自顶向下与自底向上两大类分析技术。本课程设计讨论自顶向下的情况。安徽工程大学课程设计(论文)第6页1.3软件定义MicrosoftvisualC++6.0:--VisualC++6.0是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。MicrosoftofficeVisio2003:是微软公司出品的一款的软件,它有助于IT和商务专业人员轻松地可视化、分析和交流复杂信息。它能够将难以理解的复杂文本和表格转换为一目了然的Visio图表。该软件通过创建与数据相关的Visio图表(而不使用静态图片)来显示数据,这些图表易于刷新,并能够显著提高生产率。使用OfficeVisio2007中的各种图表可了解、操作和共享企业内组织系统、资源和流程的有关信息。1.4开发环境操作系统:MicrosoftWindowsXP开发平台:MicrosoftvisualC++6.0安徽工程大学课程设计(论文)第7页第二章需求分析LL(1)分析法中,第一个L的含义是:从左向右的处理输入进行分析,第二个L的含义是:为每个输入串描绘出一个最左推导,1的含义是:向输入串中输入一个符号就可以唯一确定当前将要的产生式。构造出一个LL(1)语法分析器可以更加直观的解决文法输入串在面临不同产生式的选择上,所要进行的分析操作,从而为开发人员带来方便。2.1问题陈述建立一个针对LL(1)文法编译器的自动生成器,要完成此编译器需要对源文件进行两遍处理:第一遍词法分析、第二遍语法分析,语法分析程序应用LL(1)语法分析方法。首先输入(打开)定义好的文法文件,然后建立词法分析器,包括词法分析主程序、扫描部分、关键字表等等。经词法分析后分别计算所输入的文法的每个非终结符号的FIRST集合、每个非终结符号的FOLLOW集合,以及每个规则的SELECT集合,并判断任意一个非终结符号的任意两个规则的SELECT集的交集是不是为空,如果是,则输入文法符号是LL(1)文法,可以进行分析。在对文法的语法进行分析的过程中,要解决各方面的问题如(1)当文法出现做递归时可能使

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功