概述
一、实验目的
通过本实验使学生进一步熟悉和掌握程序设计语言的词法分析程序的设计原理及相关的设计技术,如何针对确定的有限状态自动机进行编程序;熟悉和掌握程序设计语言的语法分析程序的设计原理、熟悉和掌握算符优先分析方法。
二、实验要求
本实验要求:①要求能熟练使用C++程序设计语言编程;②在上机之前要有详细的设计报告(预习报告);③要编写出完成相应任务的程序并在计算机上准确地运行;④实验结束后要写出上机实验报告。
三、实验题目
针对下面文法G(S):
S→ v = E
E→E+E│E-E│E*E│E/E│(E)│ v │ i
其中,v为标识符,i为整型或实型数。要求完成
① 使用自动机技术实现一个词法分析程序;
② 使用算符优先分析方法实现其语法分析程序;
③ 在语法分析过程中同时完成常量表达式的计算。
代码一:词法分析
#include<bits/stdc++.h>
using namespace std;
char opword[]="+-*/";
char eword[]="=";
char lbordword[]="(";
char rbordword[]=")";
FILE *fin,*fout;
int main()
{
queue<int> q;
//新的一行 0 标识符 1 等于号 2 运算符 3 左括号 4 右括号 5 数字 6
char ch,token[40];
int es=0,j,state,brp;
if((fin=fopen("I1.txt","r"))==NULL)
{
printf("n打开词法分析输入文件出错!n");
return(1);
}
if((fout=fopen("O1.txt","w"))==NULL)
{
printf("n创建词法分析输出文件出错!n");
return(2);
}
ch=getc(fin);
string v;//标识符
string e;//表达式
map<string,string> map1;
while(ch!=EOF)
{
while(ch==' '||ch=='n'||ch=='t'){
//fprintf(fout,"n");
q.push(0);
ch=getc(fin);
v="";
}
if(isalpha(ch)||ch=='_')
{
token[0]=ch;
j=1;
ch=getc(fin);
while(isalnum(ch)||ch=='_')
{
token[j++]=ch;
ch=getc(fin);
}
token[j]='