⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prece.h

📁 输入一个DO-WHILE的语句,进行词法分析,词法分析器利用超前搜索,状态转换等方法,将源程序转化成为一个一个的单词符号二元式,如果词法分析无误,则进入语法分析部分,使用简单优先法进行文法分析,为每个
💻 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 + -