scan.h

来自「一个c语言的编译器的源代码」· C头文件 代码 · 共 55 行

H
55
字号

#ifndef SCAN_H_
#define SCAN_H_

#include <string>
#include <list>

using namespace std;

// Type of token
typedef enum {
	ENDFILE,ERROR,
	IF,ELSE,WHILE,RETURN,VOID,INT,
	PLUS,MINUS,MUL,DIV,LT,LTEQ,GT,GTEQ,EQ,
	NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,
	LSQUAR,RSQUAR,LBRACE,RBRACE,LCOMMENT,RCOMMENT,
	ID,NUMBER
} TokenType;

//
// For token saving
typedef struct tokenunit{
	TokenType token;
	string tokenstring;
	int lineno;
} TokenUnit;

// For reserve words saving
typedef struct{
    char * word;
    TokenType type;
} ReserveWordsUnit;

extern string TokenString;
extern TokenType token;

extern list<TokenUnit> tokenHist;

extern list<TokenUnit>::iterator tokenIt;

extern ReserveWordsUnit ReservedWords[10];

// DFA states
typedef enum{
    INID,INNUM,INLTEQ,INGTEQ,INEQ,INNEQ,
        INCOMMENT,START,DONE
} ScanState;

TokenType GetToken();

list<TokenUnit>::iterator Backup();

void Restore(list<TokenUnit>::iterator &it);

#endif

⌨️ 快捷键说明

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