一、实验内容
通过完成词法分析程序,了解词法分析的过程。编制一个读单词程序,对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,即基本保留字、标识符、常数、运算符、分界符五大类。
对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,其词法描述如下:
(1)关键字:
begin,call,const,do,end,if,odd,procedure,read,then,var,while,write
(2) 标识符:用来表示各种名字,必须以字母开头小于10位字符组成
(3) 数字:以0-9组成小于14位的数字
(4) 运算符:+,-,*,/,:=,=,#
(5) 分界符:, ,. ,; ,( ,)
二、实验代码
#include #include #include #include using namespace std; //创建四个表,储存符号 const char *k[13]={"begin","call","const","do","end","if","odd","procedure","read","then","var","while","write"};//关键字表 const char *s1[5]={",",".",";","(",")"};//界符表 const char *s2[6]={"+","-","*","/","++","--",};//运算符号表 const char *s3[9]={"",">=","=",">",">=","",":=","#"}; //关系运算符号表 //定义全局变量 int row=1,line=1; int t,p=0;//单词类别码以及记录移动指针 char instring[100];//保存输入的程序代码缓存数组 char outtoken[10];//输出 char ci[8],id[10];//暂时保存数字和字符 //函数的声明 void analysis();//分析函数,决定调用哪个函数进行分析 void symbol();//分析以非字母数字开头的字符 void constant();//分析常数 void alphabet();//分析标识符和关键字 void show();//打印输出函数 bool isnumber(char x);//判断是否是数字 bool isalpha(char x);//判断是否是字母 int main(){ cout