编译原理的第一个实验:设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
如果你有点思路但码力不足,可以跟着我一步步来手肝!
二.什么是“词法分析器”?词法分析程序简单来说就是“读单词程序”, 该程序扫描高级语言编写的源程序,将源程序中由“单词符号”组成的字符串分解出一个个单词来。
单词符号分为5种: 1.保留字:例如C语言中的if、else、while、do等等 2.标识符:通常由用户自己定义。用来标记常量、数组、变量、类型等等。a,b,c等 3.常数:整型常数369、布尔常数TRUE等 4.运算符:如“+、-、*、/、” 5.界符:在语言中是作为语法上的分界符号使用的,如“,”“;”“(”“)”等
注意:保留字、运算符、界符的个数是确定的; 而常数、标识符则是不限定个数的。
词法分析器例子: 输入内容:源程序字符串。 例如“int a=1;a++;”
输出内容:输出的是与源程序等价的单词符号序列,并且所输出的单词符号通常表示成如下的二元式: (单词种别,单词自身的词)
单词种别:草莓视频在线观看APP可以类比成,每个种类都有相对应的“种别码”,即给对应的种别进行编号以加以区分。 就像自然界中,草莓视频在线观看APP可以将植物编号为0,动物编号为1等等
单词自身的词:就是说在同一种类的不同单词区别开来。 比如,动物中可以再细分:两栖动物内码编号为1,哺乳动物内码编号为2等
所以当草莓视频在线观看APP输入“小狗”,则输出二元式(1,2) 当然这只是形象的比喻,在计算机中草莓视频在线观看APP往往需要识别什么“int、a、+、-”等等符号,其实原理和刚刚举的例子有相同之处的。
[1] 流程图: [2] 状态转化图: 三.正式设计 1.设计种别码表由于实验里已经给出了,草莓视频在线观看APP就按照它纯cout出来就行了。
用一个函数showAll()来展示
void showAll() //展示部分单词符号所对应的种别码(可自行扩展){cout