编译原理算符优先分析算法

算符优先分析算法

1.该实验实现算符优先分析算法,由于时间关系,尚未实现用程序计算FIRSTVT,LASTVT,因此本实验的各种非终结符及其之间的优先关系人为初始化。本实验参考例4.12及其优先关系表。 2.算符优先关系表参考课本74页表4.4

+ * id ( ) # 3.结果如图

+ > > > < > < * < > > < > < id < < < < ( < < < < ) > > > = > # > > > > =

4.源代码

# include # include # include

# define MAX 50 //定义最大长度为50,可以变化

struct sst{

char s[MAX];

int ps;//栈顶终结符指针 int top;//栈顶指针 };

struct inputst{

char in[MAX];

int pin;//当前字符指针 }; //定义算符及其优先关系表 char ch[6] = {'+','*','i','(',')','#'};

char chrelation[6][6]={'>','<','<','<','>','>', '>','>','<','<','>','>', '>','>','@','@','>','>', '<','<','<','<','=','@', '>','>','@','@','>','>', '<','<','<','<','@','=', };

char rela(char c1,char c2){ int i = 0,j = 0; while(ch[i] != c1) i++; while(ch[j] != c2) j++;

return chrelation[i][j]; }

int is_VN(char c1){//判断是否为非终结符 int i = 0; while(i < 6){ if(ch[i] == c1) return 0; i++; } return 1; }

void main(){ struct sst S; for(int i = 0;i < MAX;i++) {

S.s[i] = ' '; } S.s[0] = '#'; S.ps = 0; S.top = 0; struct inputst input;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4