《编译原理》实验指导书
民生—编译原理实验指导书

编译原理实验指导书实验一词法分析一、实验目的通过实现PL/0语言(一种示例小语言)的词法分析器,理解词法分析过程,掌握程序各部分之间的接口安排。
二、实验要求1、要求每位同学单独完成词法分析器,并接受检查;2、撰写实验报告。
(1) 用有限自动机画出“三、实验内容”中的词法规则;(2) 实验报告不要摘抄全部代码,但需要流程图的形式描述程序结构;(3) 必须书写设计和实现的过程中出现的一些问题以及解决方法。
三、实验内容1、PL/0语言的单词结构关键字(10个):begin, end ,if ,then, while, do, const, var,call,procedure标识符:字母序列,最大长度10常数:整型常数算符和界符(17个):+,-,*,/,odd,=,<>,<,>,<=,>=,:=,(,) ,, ,.,;2、单词的种别划分标识符作为一种常数作为一种算符和界符每个单词作为一个单独种别3、PL/0的语言的词法分析器将要完成以下工作:(1)跳过分隔符(如空格,回车,制表符);(2)识别诸如begin,end,if,while等保留字;(3)识别非保留字的一般标识符。
(4)识别数字序列。
(5)识别:=,<=,>=之类的特殊符号。
4、词法分析器的实现方式:把词法分析器设计成一个独立子程序,以便于语法分析器调用。
词法分析器运行一次产生一个单词符号。
5、词法分析器的输出(单词种别编码,单词本身的值)说明:词法分析器的输出应该是(种别编码,属性值),但当种别不能唯一代表单词本身时,就需要组织符号表了。
为了降低实验难度,实验输出就改成了(种别编码,单词本身的值)。
6、词法分析器和语法分析器的接口设计要把词法分析器设计成独立的子程序,以便于被语法分析器调用,每调用语法分析器一次,就识别出一个单词符号。
实验二利用算符优先分析方法设计一个计算器一、实验目的在实验一的基础上,利用算符优先分析方法设计一个计算器,以加深对算符优先分析过程和语义分析过程的理解。
编译原理实验指导

编译原理实验指导编译原理实验指导⽬录实验1:⽂法的读⼊和输出 (3)实验2:词法分析程序的设计 (5)实验3:LL(1)⽂法构造 (7)实验4:语法分析程序的设计(1) (9)实验5:语法分析程序的设计(2) (11)实验6:逆波兰式的翻译和计算 (15)实验7:语法制导的三地址代码⽣成 (17)实验1 ⽂法的读⼊和输出⼀、实验⽬的熟悉⽂法的结构,了解⽂法在计算机内的表⽰⽅法。
⼆、实验内容1、设计⼀个表⽰⽂法的数据结构;2、从⽂本⽂件中读⼊⽂法,利⽤定义的数据结构存放⽂法,并输出;3、本实验结果还将⽤于实验3。
三、实验要求1、了解⽂法定义的4个部分:G(Vn, Vt, S, P)Vn ⽂法的⾮终结符号集合,在实验中⽤⼤写的英⽂字母表⽰;Vt ⽂法的终结符号集合,在实验中⽤⼩写的英⽂字母表⽰;S 开始符号,在实验中是Vn集合中的⼀个元素;P 产⽣式,分左部和右部,左部为⾮终结符号中的⼀个,右部为终结符号或⾮终结符号组成的字符串,如S->ab|c2、根据⽂法各个部分的性质,设计⼀个合理的数据结构⽤来表⽰⽂法,1)若使⽤C语⾔编写,则⽂法可以设计成结构体形式,结构体中应包含上述的4部分,2)若使⽤C++语⾔编写,则⽂法可以设计成⽂法类形式,类中⾄少含有4个数据成员,分别表⽰上述4个部分⽂法数据结构的具体设计由学⽣根据⾃⼰想法完成,并使⽤C或C++语⾔实现设计的数据结构。
3、利⽤完成的数据结构完成以下功能:1)从⽂本⽂件中读⼊⽂法(⽂法事先应写⼊⽂本⽂件);2)根据⽂法产⽣式的结构,分析出⽂法的4个部分,分别写⼊定义好的⽂法数据结构的相应部分;3)整理⽂法的结构;4)在计算机屏幕或者⽂本框中输出⽂法,⽂法输出按照⼀个⾮终结符号⼀⾏,开始符号引出的产⽣式写在第⼀⾏,同⼀个⾮终结符号的候选式⽤“|”分隔的⽅式输出。
四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、根据⽂法定义,设计出⽂法数据结构2、⽤学⽣选择的语⾔,实现⽂法的数据结构3、编写调试⽂法读⼊和输出程序,4、测试程序运⾏效果:从⽂本⽂件中读⼊⼀个⽂法,在屏幕上输出,检查输出结果。
《编译原理》实验指导书

《编译原理》实验指导书编译⽅法实验指导书柴本成赵晨编写浙江万⾥学院2010.01⽬录实验⼀有限⾃动机的构造与实现 (1)实验⼆词法分析器的设计 (3)实验三语法分析-递归下降分析器 (5)实验四LL(1)⽂法预测分析表的实现 (6)附录 (9)附录⼀实验结果的提交与检查 (9)附录⼆实验报告参考格式 (9)附录三Visual C++上机环境简介 (10)附录四参考程序 (13)实验⼀有限⾃动机的构造与实现⼀、实验⽬的1、正确理解正规式和正规集以及有限⾃动机的定义;2、熟练掌握⽤状态转换图表⽰有限⾃动机的⽅法。
⼆、实验预习提⽰1、正规表达式就是⼀种形式化的表⽰法,它可以表⽰单词符号的结构,从⽽精确地定义单词符号集。
正规表达式简称为正规式,它表⽰的集合即为正规集。
2、状态转换图是⼀张当输⼊不同内容时选择不同分析路径的有向图。
⼀个状态转换图可⽤于识别⼀定的字符串。
3、有限⾃动机(FA)是更⼀般化的状态转换图,可⽤来识别正规集;分为DFA和NFA 两种。
三、实验内容构造识别如下字符串的状态转换图,并将其编程实现。
1、识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10);参考程序:#include#include //字符串处理的头⽂件//判断⼀个字符是不是字母bool Isletter(char ch){if(ch>='a' && ch<='z' || ch>='A' && ch<='Z') return true;return false;}//判断⼀个字符是不是数字bool IsDigit(char ch){if(ch>='0' && ch<='9') return true;return false;}//判断⼀个字符串是不是标识符bool IsId(char *str){if(!Isletter(str[0]) ) return false;int l=strlen(str); //计算字符串的长度for(int i=1;iif(Isletter(str[i]) || IsDigit(str[i])) continue; //如果是字母或数字就继续循环else return false; //否则,返回不是字符串return true;}void main(){char *str="1abc"; //初始化字符串,也可键盘输⼊if(IsId(str)) cout<<"accept!"<else cout<<" not accept!"<}2、识别实数(要求正负号可有可⽆,长度不超过20,不要求识别⽤科学记数法表⽰的实数)。
编译原理实验指导书

编译原理实验指导书计算机学院实验1 词法分析程序一、实验目的构造simple语言的词法分析程序,程序要求能对输入的字符串流进行词法分析。
在实验的过程中,学会应用单词分析的方法——NFA(非确定有穷自动机)和DFA(确定有穷自动机),加深对词法分析原理的理解。
二、实验内容编写为任一正则文法(见实验参考(一)simple惯用的词法)构造非确定有穷自动机NFA并转换成确定有穷自动机DFA,并对任给的一个输入串(见实验参考(二)测试用输入串)进行词法分析的程序,程序的输出为单词的序列(见实验参考(三)程序输出形式)。
三、实验参考(一)simple 惯用的词法1. 下面是语言的关键字:Begin if then while do end所有的关键字都是保留字,并且必须是小写。
2. 下面是专用符号::= + * / < <= <> > >= = ; ( ) #3. 其他单词是标识符(ID)和整型常数(NUM),通过下列正规式定义:ID = letter(letter| digit)*NUM = digit digit*letter = a |…| z | A |…| Zdigit = 0 |…| 9小写和大写字母是有区别的。
思考:构造实数的正规表达式,力争实现对实数的识别及表示。
4. 空格由空白、换行符和制表符组成。
空格一般用来分隔ID、NUM、运算符和关键字,词法分析阶段通常被忽略。
5. 各种单词符号对应的种别码如下表所示:(二)词法分析程序的功能1. 输入为所给文法的源程序字符串。
2. 程序的输出形式为单词串的输出形式。
所输出的每一单词,均按形如(syn,token和sum)的二元式编码。
其中,syn 为单词种别码;token为存放的单词自身字符串;sum为整型常数。
3.测试源程序片断:begin x:=9; if x>0 then x:=2*x+1/3;end #。
编译原理实验指导书

陕西理工学院数学与计算机科学学院《编译原理》实验指导班级网络10级指导教师曹阳计算机工程教研室2012年8月25日编译原理实验指导书一、实验的目的《编译原理》是针对计算机专业的学生开设的一门专业基础课程,对引导学生进行科学思维和提高学生解决实际问题的能力有重要的作用。
开设“编译原理实验”的主要目的是让学生加深理解编译原理的基本理论、方法、词法分析、语法分析、中间代码的生成直到最后的代码生成,了解编译器原理,从而提高学生分析问、题解决问题的能力。
通过实验实现以下基本目标:1.深化已学的知识,完成从理论到实践的转化通过实验,进一步加深对编译原理基本思想、原理的了解。
2. 提高分析和解决实际问题的能力实验不仅是编译原理的一次模拟训练,同时通过实验,积累经验,提高分析和解决问题的能力。
3.培养“开拓创新”能力大力提倡和鼓励在程序中使用新方法,新技术。
激发学生实践的积极性与创造性,开拓思路,设计新算法,进行新创意,培养创造性能力。
二、参加实验的学生应具备的条件参加实验的学生应当具备计算机程序设计的一些基础的知识。
即学生应当熟练掌握和使用一种计算机操作系统(windows操作系统等)、一种程序设计语言(vb、vc、c、delphi等)。
三、实验要求实验的要求体现于整个工作的各个阶段中,可根据所选课题的特点而有所侧重,但应达到如下的基本要求:(1) 根据课题任务制定合理、可行的工作计划任务;(2) 制定适当的技术方案;(3) 学生在老师的指导下独立完成设计过程;(4) 撰写实验报告(包括实验内容中各个阶段所要求的文字材料);(5) 通过实验检查评定;四、实验项目与内容提要五、实验课程考核办法1、该实验课程考核成绩按百分制计算,满分为100分,60分为及格,60分以上者可获取该学分。
2、该实验课考核由三部分组成:实验课前预习(20%),实验操作(60%),实验报告(20%)。
3、各部分成绩由实验指导教师在每个实验项目完成后分别给出,在学期结束后或完成全部实验项目后综合给出该门实验课的成绩。
学生用-编译原理实验指导书

实验一无符号数的有穷自动机的实现(一)实验目的无符号数的有穷自动机的实现目的是使学生掌握文法的形式描述,穷自动机的概念。
将文法转换成有穷自动机的方法,理解出错处理程序思想,如何用状态矩阵实现一个穷自动机的机内表示。
(二)实验内容1.无符号数的BNF描述(0)<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分>(1)<余留无符号数>→d <余留无符号数> | . <十进制数> | e <指数部分>|ε(2)<十进制小数> → d <余留十进制小数>(3)<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε(4)<指数部分> → d <余留整指数> | + <整指数> | - <整指数>(5)<整指数> → d <余留整指数>(6)<余留整指数> → d <余留整指数> | ε2.将G[<无符号数>]文法转换成有穷自动机。
3.构造状态矩阵;将有穷自动机的状S1 S2 ……Sn及输入的字a1 a2 ……am 构成一个n*m的矩阵。
4.用状态矩阵设计出一个词法分析程序。
5.扫描无符号数,根据文法给出无符号数出错的位置。
(三)实验要求1.学生课前要认真阅读实验指导,理解实验内容与相关理论知识的关系,并完成预习报告2.用C语言或其它高级语言编写程序3.写出实验报告实验二语法制导把表达式翻译成逆波兰式(一)实验目的进一步掌握语法制导翻译的概念,理解中间语言,设计出错处理程序方法,掌握把表达式翻译成中间语言的算法。
(二)实验内容1.从左到右扫描中缀表达式,经语法分析找出中缀表达式出现的错误并给出错误的具体位置和类型。
编译原理—实验指导书-1

4.词法分析器的功能和输出格式
词法分析器的功能是输入以字符串表示的源程序,从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式(单词种别码,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示,本程序是通过对给定路径的文件的分析后以单词符号和文字提示显示),本实验中,采用单词种别码是一符一种种别码的方式。
(4)var
(5)a,b,c:integer;
(6)x:char;
(7)begin
(8)if(a+c*3>b)and(b>3)thenc:=3;
(9)x:=2+(3*a)-b*c*8;
(10)forx:=1+2to3dob:=100;
(11)whilea>bdoc:=5;
(12)repeata:=10;untila>b;
(124){
(125)printf("%s\t$运算符\n\n",Word);
(126)}
(127)else if(ch=='-')
(128){
(129)printf("%s\t$运算符\n\n",Word); //判断结果为“--”
(2)设计描述Sample语言各类单词结构的状态转换图(即有限自动机FA);
如标识符的状态转换图可以用下图表示
其相应代码科为
(1)recog_id(char ch)
(2){
(3)char state='0';
(4)while(state!='2')
(5){
(6)switch(state)
编译原理实验指导书

编译原理实验指导书计算机科学与技术系2007年6月目录实验目的和任务 (1)实验一:词法分析器 (1)实验二:语法分析器1 (5)实验三:语法分析器2 (9)实验四:语义分析和中间代码生成器 (11)实验目的和任务编译原理是一门实践性很强的课程,只有通过实践,才能真正理解其理论的深层内涵,切实掌握编译器的生成技术。
实际的编译程序是十分复杂的,有时多达十几万条指令组成,实现起来难度很大。
在编译原理的实验中,简化了真实程序设计语言要面临的许多问题,选用了具有一定表现能力的实用语言的子集。
实验主要涉及最关键的3个环节──词法分析、语法分析和中间代码生成,每个环节既独立又相互关联,前后衔接,可合为一体,能较清楚地展现编译器前端的工作状况。
编程语言要求:C、C++或JAVA。
实验一:词法分析器一、实验目的通过编写词法分析程序,了解词法分析的过程。
二、实验内容编写能识别给定的程序设计语言的词法规则,输出单词流的识别程序。
三、实验设备及工具1.硬件:PC机Pentium100以上。
2.软件:Win2000或WinXP、BC++、VC++或JA V A开发环境。
四、实验说明以下所给文法是进行词法分析和语法分析的依据,并将该文法中涉及到的单词信息提取到了单词符号与种别对照表中。
本次实验要求编写符合该文法构词规则的词法分析器。
1. 文法G(<程序>)<程序>→BEGIN <语句表> END.<语句表>→<语句>|<语句>;<语句表><语句>→<赋值语句>︱<条件语句>︱<WHILE语句>︱<复合语句><赋值语句>→<变量>=<算术表达式><条件语句>→IF <关系表达式> THEN <语句> ELSE <语句><WHILE语句>→WHILE <关系表达式> DO <语句><复合语句>→BEGIN <语句表> END<算术表达式>→<项>|<算术表达式>+<项>|<算术表达式>-<项><项>→<变量>|<整数><关系表达式>→<算术表达式><关系运算符><算术表达式><关系运算符>→<︱= =︱><变量>→<标识符><标识符>→<标识符><字母>|<标识符><数字>|<字母><整数>→<数字>|<数字><整数><字母>→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z<数字>→0|1|2|3|4|5|6|7|8|9注意阴影部分,其中<整数>和<标识符>被看作最小词法单位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》实验指导书实验目的和内容编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法,并加深对编译技术的认识。
实验内容共需实现编译器的词法、语法和语义分析程序三个组成部分。
要求学生必须完成每个实验的基本题目要求,有余力的同学可尝试实验的扩展要求部分。
实验报告要求每人针对所完成的实验内容上交一份实验报告,其中主要包括三方面内容:1、实验设计:实验采用的实现方法和依据(如描述语言的文法及其机内表示,词分析的单词分类码表、状态转换图或状态矩阵等,语法分析中用到的分析表或优先矩阵等,语法制导翻译中文法的拆分和语义动作的设计编写等);具体的设计结果(应包括整体设计思想和实现算法,程序结构的描述,各部分主要功能的说明,法以及所用数据结构的介绍等)。
2、程序代码:实验实现的源程序清单,要求符合一般的程序书写风格,有详细的注释。
3、实验结果分析:自行编写若干源程序作为测试用例,对所生成的编译程序进行测试(编译程序的输入与输出以文件的形式给出);运行结果分析(至少包括一个正确和一个错误单词或语句的运行结果);以及改进设想等。
注意事项1、电子版实验报告和源程序在最后一次机时后的一周内上交。
(每个同学上交一个压缩文件,其命名格式为“学号_姓名.rar”,内含实验报告和一个命名为“源程序”的文件夹。
注意提交的源程序应是经过调试、测试成功的较为通用的程序,并应有相应的注释、运行环境和使用方法简介。
)2、不接受不完整的实验报告和没有说明注释的源程序,或者说明与程序、运行结果不符合的作业。
特别鼓励:扩展题目1、为亲身经历一个小型编译器的开发全过程,触摸一下与实际编译器开发相关的工作,大家可以自由组成3人左右的小组,推举组长,模拟一个团队分工协作开发大型软件的实战环境,融入软件工程的思想规范和一般理论方法,初步体验从系统分析设计、编码测试到交付维护的一个完整编译器软件的开发过程。
要求组长为每个小组成员分配主要负责的任务,完成相应的分析设计员、程序员和测试员等角色的工作,并以小组为单位提交一份实验报告和源程序,在报告封面上写明每个同学主要完成和负责的部分。
2、以组为单位完成的实验内容至少必须整合词法、语法和语义三个部分的实验,对于选定的适当规模的文法(如C语言的一个大小适宜的子集),进行系统的总体设计、功能分析、编码测试等工作。
完成一个从对源程序的词法分析开始,到中间代码生成的完整的编译器前端的开发,使所涉及到的编译系统的各个组成模块有机地衔接在一起,提交一份完整的实验报告和源程序,并将以下几个方面描述清楚:1)任务概述2)系统的设计3)系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等)4)系统工作过程及运行说明(使用操作指南)5)源程序清单(要求有详细注释)和实例程序运行结果6)体会和讨论3、实验题目1)参考题目:在词法、语法和语义三个基本实验题目的基础上,完成以下扩展部分的要求:实验一:(1)扩充关键字的数目、增加单词类别(如分界符、逻辑运算符等)、将常数分成字符串常量、整型常量和实型常量等;添加词法分析中单词出错的位置、加细错误类型的检查以及删除注释部分等;并考虑如何在词法分析阶段建立变量名表和常数表,以备后续的编译过程查询。
(2)选作:识别一个程序设计语言(如C语言)所有单词的词法分析程序设计。
建议自学LEX系统。
实验二:(1)完成以下文法G[<复合语句>]的两种典型的语法分析程序的设计与实现。
G[<复合语句>]:<复合语句> → begin<语句表>end<语句表> → <语句>|<语句>;<语句表><语句> → <赋值语句><赋值语句> → <变量>:=<算术表达式><算术表达式> → <项> | <算术表达式>+<项> | <算术表达式>-<项><项> → <因式> | <项>*<因式> | <项>/<因式><因式> → <变量> | <常数> | (<算术表达式>)<变量> → <标识符><标识符> → <标识符> <字母> | <标识符> <数字> | <字母><常数> → <整数> | <浮点数><整数> → <数字> | <数字> <整数><浮点数> →• <整数> | <整数> • <整数><字母> → A|B|C|…|X|Y|Z|a|b|c|…|x|y|z<数字> → 0|1|2|…|9(2)在所给文法G[<复合语句>]的基础上,适当扩大分析对象,增加功能。
如赋值语句的左部不再只局限于简单变量,还可以是下标变量等;右部的算术表达式中可以包括函数调用、数组元素等。
除赋值语句外,还可进一步选择高级语言的其它语法结构类型,如流程控制语句、子程序结构语句、说明语句等。
语法分析的结果以语法树的形式输出,并显示分析过程的信息(如分析栈、符号栈、当前应被归约的最左子串、归约后所得的符号等)。
(3)增强错误检查和处理能力。
例如,当输入的源程序存在错误时,把所发现的每一处错误的性质(错误编码)和位置填入一张表中,以备以后输出之用;同时再跳过错误所在的语法范畴(如单词、表达式、语句等),继续对输入串的后续部分进行编译。
至于对错误的具体处理措施应结合所采用的语法分析方法,以LR分析为例,可对LR分析表中的空白单元进行出错原因分析,填入一个指向出错处理子程序的指示字。
(4)选作:学习编译器的自动生成工具LEX、YACC(或其它类似工具)的使用方法,运用LEX和YACC编写并生成以下文法G[<程序>]所定义语言的词法和语法分析程序。
G[<程序>]:<程序> → PROGRAM<标识符>;<分程序><分程序> → <变量说明>BEGIN<语句表>END.<变量说明> → V AR<变量说明表>;<变量说明表> → <变量表>:<类型> | <变量表>:<类型>;<变量说明表><类型> → INTEGER | REAL<变量表> → <变量> | <变量>,<变量表><语句表> → <语句> | <语句>;<语句表><语句> → <赋值语句> | <条件语句> | <WHILE语句> | <复合语句><赋值语句> → <变量>:=<算术表达式><条件语句> → IF<关系表达式>THEN<语句>ELSE<语句><WHILE语句> → WHILE<关系表达式>DO<语句><复合语句> → BEGIN<语句表>END<算术表达式> → <项> | <算术表达式>+<项> | <算术表达式>-<项><项> → <因式> | <项>*<因式> | <项>/<因式><因式> → <变量> | <常数> | (<算术表达式>)<关系表达式> → <算术表达式> <关系符> <算术表达式><变量> → <标识符><标识符> → <标识符> <字母> | <标识符> <数字> | <字母><常数> → <整数> | <浮点数><整数> → <数字> | <数字> <整数><浮点数> →• <整数> | <整数> • <整数><关系符> → < | <= | = | > | >= | <><字母> → A|B|C|…|X|Y|Z|a|b|c|…|x|y|z<数字> → 0|1|2|…|9实验三:(1)增加语义分析的范围,如进一步完成布尔表达式(参见教材P200)、常见程序流程控制语句(参见教材P205)等的翻译。
(2)语法制导翻译过程的可视化处理,选择编译各阶段用到的典型算法实现其动态演示。
(3)选作:完成实验二中文法G[<程序>]所定义的语言的语法制导翻译程序。
2)自拟题目:根据小组成员的兴趣自主选择或自定实验题目。
要求先提交一份申请文档,说明所选题目、实现方案和技术路线;然后小组成员再与教师就题目的难易程度和工作量具体讨论调整,细化课程设计内容,最终确定要完成的主要工作;在得到老师的认可之后方可继续进行。
实验一词法分析程序实现一、实验目的与要求通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符流形式的源程序转化为一个由各类单词符号组成的流的词法分析方法。
二、实现方法与环境词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。
一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵连同控制程序一起便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。
构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。