您现在的位置是:首页 >技术教程 >编译原理之词法分析实验(附完整C/C++代码与总结)网站首页技术教程
编译原理之词法分析实验(附完整C/C++代码与总结)
简介编译原理之词法分析实验(附完整C/C++代码与总结)
一、实验内容
通过完成词法分析程序,了解词法分析的过程。编制一个读单词程序,对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<iostream>
#include<stdio.h>
#include<string.h>
#include<iomanip>
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<<"请输入一段程序代码并以@结束:"<<endl;
//输出程序代码
do{
instring[p++]=getchar();
} while(instring[p-1]!='@');
getchar();//吸收回车键
instring[p-1]='