scanner.h

来自「使用实际的编译算法的计算器 包括词法、文法分析过程」· C头文件 代码 · 共 47 行

H
47
字号
#pragma once
#include<string>
#include<queue>

#define MYSPC_BEGIN namespace my_space{
#define MYSPC_END }

MYSPC_BEGIN

enum DSTATE{
	// trap state
	DERROR=false,
	// start state
	START,
	// non-accepting state 
	BNAT,       // could be a natural number
	MFLOAT,     // maybe a float point number
	BFLOAT,     // could be a float point number
	// accepting state:
	MINUS,PLUS,MUL,DIV,
	NAT,FLOAT,
	POSI,NEG,
	LP,RP,      // left&right parentheses
	EOI,        // end of input
};

class Parser;
class Scanner{
	friend class Parser;
public:

	Scanner(std::string &in):_inPtr(&in),_pos(0),_slen(in.length()){}
//	void Rebind(std::string &in){ _inPtr=&in; _pos=0; _slen=in.length();  _ts.c.clear(); _vs.c.clear(); }
	bool Scan();

private:
	void _PreScan();
	DSTATE _NextTok();
	int _pos;
	int _slen;
	std::string *_inPtr;
	std::queue<DSTATE> _ts;  // tokens' sequence
	std::queue<double> _vs;   // values' sequence
};

MYSPC_END

⌨️ 快捷键说明

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