scanner.h

来自「为一个很好地语法解析内核程序」· C头文件 代码 · 共 60 行

H
60
字号


/****************************************************/
/* File: scanner.h                                  */
/* The scanner implementation for the C- compiler   */
/* Xiang Cui (sean)                                 */
/* 230030782                                        */
/****************************************************/

#include <iostream>
#include <iomanip.h>
#include <string>
#include <map>
#include <fstream>
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"

typedef enum
/* book-keeping tokens */
{ERROR,ENDFILE,
 /* keywords */
 ELSE,IF,INT,RETURN,VOID,WHILE,
 /* multicharacter tokens */
 ID,NUM,
 /* special symbols */
 PLUS,MINUS,TIMES,DIV,LT,LTEQ,GT,GTEQ,EQ,NEQ,ASSIGN,SEMI,
 COMMA,LPAREN,RPAREN,LSQR,RSQR,LCRLY,RCRLY,LCMNT,RCMNT
} TokenType;


/* states in scanner DFA */
typedef enum
{ START,INNUM,INID,DONE,INLT,INGT,INEQ,INNEQ,INSLASH,INLCMNT,INRCMNT,ERR}
StateType;

class Myscanner
{

public:
    Myscanner(const char *);
    TokenType scan(); /*scan procedure*/
    void printToken(TokenType token, string tokenString);/*print out tokens*/
    TokenType reservedLookup (string str);/*look up the Keywords table*/
    string tokens;
    int lineno;
    ifstream sf;//source file
private:
    bool save;
    char c;

    StateType state;
    TokenType currentToken;

};



⌨️ 快捷键说明

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