📄 prece.h
字号:
#ifndef PRECEDENCE_H
#define PRECEDENCE_H
#include "Global.h"
/*
NO = None relation
GT = Greater Than
LT = Less Than
EQ = Equal to
ND = Not Defined */
typedef enum { NO=0, GT, LT, EQ, ND } Prece;
/*
Precedence table operates */
Prece GetPrecedence(const char*, const char*);
/*
the Precedences Table */
Prece PreTable[18][18] =
{ /**
S d o B w h i l e E a = + 1 > b c # **/
/* S */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* d */ { NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* o */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LT, GT },
/* B */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* w */ { NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* h */ { NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* i */ { NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* l */ { NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* e */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LT, NO, NO, NO, NO, NO, NO, GT },
/* E */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* a */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, EQ, NO, GT },
/* = */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, GT },
/* + */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, GT },
/* 1 */ { NO, NO, NO, NO, NO, GT, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* > */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, GT },
/* b */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT },
/* c */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, GT },
/* # */ { LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, EQ },
};
/*
Impelement precedence table operates */
Prece GetPrecedence(const char* c1, const char* c2)
{
int i, j;
i = CharToIndex(c1);
j = CharToIndex(c2);
if (i!=-1 && j!=-1)
{
return PreTable[i][j];
}
else
{
return ND; /* Not Defined */
}
}
/*
Convert terminals/nonterminals
to the index of the precedence matrix */
int CharToIndex(const char* c)
{
switch (*c)
{
case 'S': return 0;
case 'd': return 1;
case 'o': return 2;
case 'B': return 3;
case 'w': return 4;
case 'h': return 5;
case 'i': return 6;
case 'l': return 7;
case 'e': return 8;
case 'E': return 9;
case 'a': return 10;
case '=': return 11;
case '+': return 12;
case '1': return 13;
case '>': return 14;
case 'b': return 15;
case 'c': return 16;
case '#': return 17;
default: return -1;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -