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

📄 scan.h

📁 一个很全的编译器程序,有各种文法的代码,各种方法都分开写的
💻 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 + -