symbolentry.h

来自「compiler principle how to ananilyze」· C头文件 代码 · 共 73 行

H
73
字号
// SymbolEntry.h: interface for the SymbolEntry class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SYMBOLENTRY_H__A231FFAB_5A7D_48A0_8C11_F52721EA1653__INCLUDED_)
#define AFX_SYMBOLENTRY_H__A231FFAB_5A7D_48A0_8C11_F52721EA1653__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "VLocation.h"

#include <string>
using namespace std;

class SymbolEntry
{
// token_type			token_kind						    lexeme
// -------------------------------------------------------------------------------------------
// VN					V: Non-terminal symbol					[A-Za-z][A-Za-z_0-9]*
// VT					V: terminal symbol						\'Escape\' | 'epsilon'
//	Escape -> NoEscapeChar Escape | '\\\\' Escape | '\\\'' Escape | epsilon;
//	NoEscapeChar -> [^\'];

// GN					GT(GrammarTitle): GrammarName			[A-Za-z][A-Za-z_0-9]*

// ALTER				KEYWORD: meta-symbol					|		
// ARROW				KEYWORD: meta-symbol					->
// DELIMITER			KEYWORD: meta-symbol					;
// EPSILON				KEYWORD: meta-symbol					epsilon
// LEFT_BRACKET			KEYWORD: meta-symbol					[
// RIGHT_BRACKET		KEYWORD: meta-symbol					]
//--------------------------------------------------------------------------------------------
	
public:
  //token_type:
  enum {VT=256, VN=257, GN=258,
	    ALTER=259, ARROW=260, DELIMITER=261, EPSILON=262,
		LEFT_BRACKET=263, RIGHT_BRACKET=264};
  //token_kind
  enum {V=300, GT=301, KEYWORD=302};

  enum { c_ALTER='|', c_DELIMITER=';', c_REVERSE_SLASH='\\',
	     c_SINGLE_QUOTE='\'', 
		 c_LEFT_BRACKET='[', c_RIGHT_BRACKET=']' };

  static const char* p_ARROW;
  static const char* p_EPSILON;
  static const char* p_ALTER;
  static const char* p_DELIMITER;
  static const char* p_REVERSE_SLASH;
  static const char* p_SINGLE_QUOTE;
  static const char* p_LEFT_BRACKET;
  static const char* p_RIGHT_BRACKET;
  
public:
	string lexeme;
	int token_type;
	int token_kind;
	VLocationSet locations;

	SymbolEntry(const string& alexeme, int atoken_type);
	bool operator!=(const SymbolEntry& se) const;

	void setTokenType(int atoken_type);

	string display() const;
	string toStr() const;
};

#endif // !defined(AFX_SYMBOLENTRY_H__A231FFAB_5A7D_48A0_8C11_F52721EA1653__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?