编译原理 词法分析器论文.doc_第1页
编译原理 词法分析器论文.doc_第2页
编译原理 词法分析器论文.doc_第3页
编译原理 词法分析器论文.doc_第4页
编译原理 词法分析器论文.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX大学学生课程设计(论文)题 目:关于词法分析器的实现学 号:姓 名:专业年级:12计科2班教师姓名:2015年 6月 15日摘 要词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换称长度统一的标准形式属性字(TOKEN)。而词法分析器的功能是输入源程序,输出单词符号,并且词法分析器有两种处理结构:一种是把词法分析器作为主程序;另一种是把词法分析器作为语法分析程序调用的子程序。本文所要介绍的词法分析器是第一种,把它作为主程序。关键词:词法分析 编译原理AbstractLexer is through lexical analysis procedures constitute a source string isscanned from left to right, to read in source code characters and character-by-character in accordance with the rules of word formation of independentsignificance into one word. And if the property (as reserved words,identifiers, operators, boundaries, and constants, and so on). Then unified them said the length of a standard form-property words (TOKEN). LexicalAnalyzer function is the input source, output Word symbols, and lexicalanalyzer has two structures: one is the lexical analyzer as main program;the other is the parser calls the lexical analyzer programs. The lexicalanalyzer is the first to be introduced in this article, use it as the mainprogram.Keywords: lexical analysis Compilerconstruction principles目 录1 课程设计的基本分析51.1 词法分析器的概述51.2课程设计的内容51.3课程设计的内容51.4课程设计的要求51.5开发工具的选用62 词法分析模块设计62.1 设计流程图62.2 设计思路62.3 设计代码72.4 设计结果103 总结11参考文献:121 课程设计的基本分析1.1 词法分析器的概述词法分析器又称扫描器。其主要任务是从左到右依次描述字符中形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为内部编码形式的单词符号串输出,用于进行语法分析。词法分析器的工作是低级别的分析:将字符或者字符序列转化成记号.。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。1.2课程设计的内容通过课程设计进一步理解高级语言在计算机中的执行过程,加深对编译原理中重点算法和编译技术的理解,提高自己的编程能力,培养好的程序设计风格。同时通过某种可视化编程语言的应用,具备初步的Windows环境下的编程思想。1.3课程设计的内容设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。1.4课程设计的要求通过词法分析器能够实现以下五种类型如单词等的识别。(1)关键字begin,end,if,then,else,while,write,read等,do, call,const,char,until,procedure,repeat等(2)运算符:+,-,*,/,=等(3)界符:,;,.,(,),:等(4)标识符 (5)常量1.5开发工具的选用软件环境使用Win7操作系统,使用Visual C+作为编程工具,实现词法的分析。2 词法分析模块设计2.1 设计流程图2.2 设计思路先在桌面建立两个记事本文件,取名为test1.txt和test2.txt,如下运行程序,出现提示,输入以上两个txt文件的名称,即可对记事本中的内容进行分析,并把分析结果输出显示在屏幕上。2.3 设计代码#include #includeusing namespace std;#define MAX 22 char ch = ;string key15=begin,end,if,then,else,while,write,read, do, call,const,char,until,procedure,repeat;int Iskey(string c) /关键字判断int i;for(i=0;iMAX;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1;else return 0;void analyse(FILE *fpin) string arr=; while(ch=fgetc(fpin)!=EOF) arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)coutarrt$属于关键字endl; else coutarrt$属于普通标识符endl; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutarrt$属于无符号实数endl; else switch(ch) case+: case- : case* : case= : case/ :coutcht$属于运算符endl;break; case( : case) : case : case : case; : case. : case, : case : case :coutcht$属于界符endl;break; case: :ch=fgetc(fpin); if(ch=) cout:=t$属于运算符endl; else cout=t$属于运算符 :ch=fgetc(fpin); if(ch=) cout=t$属于运算符)coutt$属于输入控制符endl; else coutt$属于运算符endl; fseek(fpin,-1L,SEEK_CUR); break; case :ch=fgetc(fpin); if(ch=)cout=t$属于运算符endl; else if(ch=)coutt$属于输出控制符) coutt$属于运算符endl; elsecoutt$属于运算符endl; fseek(fpin,-1L,SEEK_CUR); break; default : coutcht$无法识别字符,请重新输入!endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout提示:路径输入错误!请重新输入源文件名:; coutn*endl; coutn*分析*endl; analyse(fpin); fclose(fpin);2.4 设计结果对上面的代码进行编译,并得到结果:输入test1.txt,得到以下结果:输入test2.txt,得到以下结果:3 总结通过这次实验,我对词法分析器有了一定的了解,进一步的巩固了这部分的知识。既通过这次用C语言对词法分析程序的编制,回顾了C语言的编程方法;又加深了对词法分析原理的理解和词法分析的实现过程,掌握了编译程序的实现方法和技术,懂得了词法分析器的工作原理。在编程过程中,遇到了不少的问题,在同学的帮助下,问题一步一步的得到了解决。先从实现最简单的扫描和输出,再实现扫描的范围扩大和输出的结果更

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论