www.pudn.com > pascallex.rar > lex.h


#if !defined(AFX_LEX_H__2DA56795_0D75_4081_837C_233894591973__INCLUDED_)  
#define AFX_LEX_H__2DA56795_0D75_4081_837C_233894591973__INCLUDED_  
#if _MSC_VER > 1000  
#pragma once  
#endif   
enum keyword{  
	identity=0,  
	//关键字  
	k_if=100,  
	k_of,  
	k_do,  
	k_to,  
	k_or,  
	k_var,  
	k_for,  
	k_end,  
	k_not,  
	k_and,  
	k_div,  
	k_mod,  
	k_type,  
	k_then,  
	k_else,  
	k_const,  
	k_begin,  
	k_while,  
	k_array,  
	k_downto,  
	k_record,  
	k_program,  
	k_function,  
	k_procedure,  
	//常量  
	c_true=200,  
	c_false,  
	c_integer,  
	c_real,  
	c_string,  
	c_char,  
	c_maxint,  
	//系统类型  
	t_integer=300,  
	t_char,  
	t_boolean,  
	t_real,  
	t_string,  
	//系统函数  
	f_abs=400,  
	f_sqr,  
	f_ord,  
	f_chr,  
	f_succ,  
	f_pred,  
	f_odd,  
	f_read,  
	f_readln,  
	f_write,  
	f_writeln,  
	//操作符和分隔符  
	o_plus=500,//+  
	o_minus,//-  
	o_ls,//<  
	o_le,//<=  
	o_gt,//>  
	o_ge,//>=  
	o_ne,//<>  
	o_eq,//=  
	o_lparent,//[  
	o_rparent,//]  
	o_lbracket,//(  
	o_rbracket,//)  
	o_comma,//,  
	o_semicolon,//;  
	o_period,//.  
	o_colon,//:  
	o_becomes,//:=  
	o_range,//..  
	o_time,//*  
	o_div///  
};  
typedef struct  tuple{  
	keyword	flag;  
	union	DATA{  
		char c_val;  
		struct int_val{  
			int	int_val1;  
			int	int_val2;  
		}i_val;  
		double d_val;  
	}data;  
}TUPLE;  
extern TUPLE result_tuple;  
extern int yy_linenum;  
int	lex();  
#ifdef _DEBUG  
void print_result(FILE*o=stdout);  
#endif  
#define LEX_NOTUPLE		-1  
#define LEX_END			0  
#define LEX_SUCCESS		1  
#define LEX_WITH_ERROR	2  
  
#ifdef  _DEBUG  
#define LEX_MAX_IDENTITY 512  
#else   
#define LEX_MAX_IDENTITY 2048  
#endif  
  
//所有的字符串常量都保存在文件*.str中  
#endif