📄 scan.h
字号:
// scan.h: interface for the Cscan class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SCAN_H__F0293CE1_81AC_47F0_9918_257702C11C14__INCLUDED_)
#define AFX_SCAN_H__F0293CE1_81AC_47F0_9918_257702C11C14__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "global.h"
/*****************词法分析器确定性有限自动机DFA的状态类型*************/
/* START 开始状态; INASSIGN 赋值状态; INRANGE 下标范围状态; */
/* INNUM 数字状态; INID 标识符状态; DONE 完成状态; */
/* INCHAR 字符状态;INCOMMENT 注释状态; */
typedef enum
{ START,INASSIGN,INRANGE,INCOMMENT,INNUM,INID,INCHAR,DONE }
StateType;
//保留字查找表:
typedef struct
{ char* str;
LexType tok;
} ReservedTable;
//初始化保留字查找表:
static const ReservedTable reservedWords[MAXRESERVED]
= {
{"program",PROGRAM},
{"type",TYPE},
{"var",VAR},
{"procedure",PROCEDURE},
{"begin",BEGIN},
{"end",END},
{"array",ARRAY},
{"of",OF},
{"record",RECORD},
{"if",IF},
{"then",THEN},
{"else",ELSE},
{"fi",FI},
{"while",WHILE},
{"do",DO},
{"endwh",ENDWH},
{"read",READ},
{"write",WRITE},
{"return",RETURN},
{"integer",INTEGER},
{"char",CHAR1}
};
class Cscan : public Cglobal
{
public:
/************* 变量声明 ***************************/
/* 源代码文本文件指针source */
FILE *source;
/*词法分析结果Token序列的存储文件指针fp*/
FILE* fp;
/* tokenString用于保存标识符和保留字单词的词元,长度41 */
char tokenString[MAXTOKENLEN+1];
/* BUFLEN源代码行的输入缓冲区长度为256 */
#define BUFLEN 256
/* lineBuf为当前输入代码行缓冲区 */
char lineBuf[BUFLEN];
/* linepos为在代码缓冲区LineBuf中的当前字符位置,初始为0 */
int linepos ;
/* bufsize为当前缓冲器中所存字串大小 */
int bufsize ;
/* EOF_flag当为文件尾时,改变函数ungetNextChar功能 */
int EOF_flag ;
public:
Cscan();
virtual ~Cscan();
void getTokenList(CString pgm);
void printTokenlist( );
protected:
/*词法分析用到的功能函数*/
int getNextChar(void);
void ungetNextChar(void);
void ChainToFile (ChainNodeType *p);
void printToken(TokenType token);
LexType reservedLookup (char * s);
};
#endif // !defined(AFX_SCAN_H__F0293CE1_81AC_47F0_9918_257702C11C14__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -