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

📄 prece.h

📁 是一个不错的语法分析器,里面实现了语法分析的算法,并判断了一些优先级的控制和对栈的操作.
💻 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 + -