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

📄 scaner.h

📁 小型C语言编译器,VC条件下运行,最后编译为汇编代码
💻 H
字号:
#if !defined(AFX_SCANER_H__AB6A94C5_5F1E_402E_B185_BECAEE10706F__INCLUDED_)
#define AFX_SCANER_H__AB6A94C5_5F1E_402E_B185_BECAEE10706F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// scaner.h : header file
//

#include <afxtempl.h>
#include "tokenizer.h"

extern CString ReservedKeywordList[];

enum TokenType
{
	// reserved Keyword
	_AUTO, _DOUBLE, _INT, _STRUCT,
	_BREAK, _ELSE, _LONG, _SWITCH, 
	_CASE, _ENUM, _REGISTER, _TYPEDEF,
	_CHAR, _EXTERN, _RETURN, _UNION,
	_CONST, _FLOAT, _SHORT, _UNSIGNED,
	_CONTINUE, _FOR, _SIGNED, _VOID,
	_DEFAULT, _GOTO, _SIZEOF, _VOLATILE,
	_DO, _IF, _STATIC, _WHILE,
	_READ, _WRITE, _PRINTF,

	// operations
	ASSIGN, PLUS, MINUS, TIMES, DIV, MOD,
	BITWISE_AND, BITWISE_OR, BITWISE_NOT, LOGICAL_NOT, LT, GT,

	// interpunctions
	LPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, COLON,

	// complex operations
	EQ/* == */, NEQ/* != */, PLUS_PLUS/* ++ */, MINUS_MINUS/* -- */,
	PLUS_ASSIGN/* += */, MINUS_ASSIGN/* -= */, TIMES_ASSIGN/* *= */, DIV_ASSIGN/* /= */,
	NGT/* <= */, NLT/* >= */, LOGICAL_AND/* && */, LOGICAL_OR/* || */,

	// others
	_EOF, _ID, _NUM, _STRING, _CHARACTER, _LABEL, _ERROR, _NONE
};

struct TOKEN
{
	enum TokenType	type;
	CString			str;
};

// class CScaner
#define MAX_KW 100

class CScaner : public CTokenizer
{
public:
	CScaner( CString& str );
	virtual ~CScaner();

	void	MapKeyword();
	/********** TRACE **********/
	void	Trace( LPCTSTR lpszPathname );
	void	Flush();

	void	PushBack();
	TOKEN&	NextToken();

public:
	// Help routines

private:
	BOOL	m_bPushedBack;
	BOOL	m_bTrace;

	CFile	m_fTraceFile;
	TOKEN	m_token;
	CMap<CString, LPCSTR, enum TokenType, enum TokenType> m_KeyIndex;
};

#endif // !defined(AFX_SCANER_H__AB6A94C5_5F1E_402E_B185_BECAEE10706F__INCLUDED_)

⌨️ 快捷键说明

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