实验三 语法分析器设计之三
――LR 分析器
//Follw.h
#include "stack"
#include <QUEUE>
using namespace std;
#include <STRING.H>
#include <IOSTREAM>
stack<int> state;
stack<char> symbol;
queue<char> inputString;
char VT[10]={' '},VN[10]={' '};//存储终结
符和非终结符
char VT1[10]={' '},VN1[10]={' '};//存储终
结符和非终结符
char produceFormula[10][10]={' '};//存储原
始产生式
char produceFormula1[10][10]={' '};// 存 储
原始产生式
char First[10][10] = {' '};//存储 First 集合
char Follow[10][10] = {' '};//存储 Follow 集
合
char Formula[10][10]= {' '};//存储修改的产
生式
int pnumber,pnumber1 = 1;
int existence(char *array,char a){ // 判断是否
存在字符
int i = 0 ;
while (array[i])
{
if (array[i] == a)
{
return i;
break;
}
// cout<<"array[i]
"<<i<<endl;
i++;
}
return -1;
}
void addTocollection(char *array,char a){// 将
字符加入加入到到字符串中
if(existence(array,a) == -1){// 判 断 是 否
存在
int k = 0;
while (array[k]){
++k;
}
array[k] = a;
}
}
void separateP(int n){ //修改原始产生式
//拓广文法
char a = 'A';
while(existence(VN,a)!= -1)// 找 到 合 适
非终结符
a++;
Formula[0][0] = a;
Formula[0][1] = '-';
Formula[0][2] = '>';
Formula[0][3] = VN[0];
pnumber = 1;
int i, j ,k;
for(i = 1 ;i <= n ; i++){
j = 3;
k =3;
for( ; j <
strlen(produceFormula[i]);j++){
Formula[pnumber][0] =
- 1
- 2
前往页