📄 prece.h
字号:
/************************************************************
Title: Operator-Precedence Parsing
Author: Dake Song, Class 0201 of Computer Science
Date: Mar.18 of 2005
**************************************************************/
#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[8][8] =
{ /**
S b A ( P a ) # **/
/* S */ { NO, NO, NO, NO, NO, NO, NO, GT },
/* b */ { NO, NO, EQ, LT, NO, LT, NO, GT },
/* A */ { NO, EQ, NO, NO, NO, EQ, NO, GT },
/* ( */ { NO, NO, LT, LT, EQ, LT, NO, GT },
/* P */ { NO, GT, NO, NO, NO, GT, NO, GT },
/* a */ { NO, GT, NO, NO, NO, GT, EQ, GT },
/* ) */ { NO, GT, NO, NO, NO, GT, NO, GT },
/* # */ { LT, LT, LT, LT, LT, LT, LT, NO }
};
/*
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 'b': return 1;
case 'A': return 2;
case '(': return 3;
case 'P': return 4;
case 'a': return 5;
case ')': return 6;
case '#': return 7;
default: return -1;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -