内容发布更新时间 : 2024/11/16 10:03:19星期一 下面是文章的全部内容请认真阅读。
算符优先分析算法
1.该实验实现算符优先分析算法,由于时间关系,尚未实现用程序计算FIRSTVT,LASTVT,因此本实验的各种非终结符及其之间的优先关系人为初始化。本实验参考例4.12及其优先关系表。 2.算符优先关系表参考课本74页表4.4
+ * id ( ) # 3.结果如图
+ > > > < > < * < > > < > < id < < < < ( < < < < ) > > > = > # > > > > =
4.源代码
# 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;