?? lex.h
字號:
/*
* file: lex.h
* func: The source file of lexical parser.
*/
#if _MSC_VER >1200 /* msvc6 or later */
#pragma once
#endif
#ifndef __LEX_H_
#define __LEX_H_
#include <string>
#include <fstream>
#include "cmd.h"
#include "types.h"
using std::string;
using std::ifstream;
#define MAXTOKENLEN 57
#define MAXDIGITLEN 7
class Lex
{
public: // data
enum tokentype{ENDOFFILE=-1,END=0,ID=257,ASC,NUM,
LEFT,RIGHT,NONASSOC,TYPE,TOKEN,START,UNION,PREC,
EXCEPT,PURE_PARSER,ERROR,
MARK,LCURL,RCURL,DLDL,DLS};
uint32 lineno; //當前正處理行號
uint32 nerror; //error count;
string strval; //當前識別出的符號的字符串值
sint32 numval; //當前識別出的符號的數值值.
// 調用 unlex() 時用于暫存當前值.
string unstrval;
sint32 untoken;
sint32 unnumval;
Bool ungetflag;
ifstream pf; //當前正在掃描處理的源文件(ParseFile).
string pfname; //源文件名(ParseFileName)
sint32 la; //向前查看符號(lookahead)
public: // function
/// 得到源文件名稱.
Lex(const string &ifname);
/// 詞法掃描器主程序,返回識別出的記號標識.
sint32 lex();
inline
sint32 gettoken()
{
return (la=lex());
}
inline
Void ungettoken()
{
ungetflag=True;
untoken=la;
unstrval=strval;
unnumval=numval;
}
/// 清除無用的 /* ... */ 注釋及空格,制表符等信息,返回下一個有效字符.
sint32 eatup_white_comment();
string read_Identifier();
sint32 eatup_string();
private: // data
enum errortype{UNKNOWN,UNTERMINATED_COMMENT,UNTERMINATED_STRING,
OUT_OF_RANGE,MUST_KEYWORD,LITERAL_ERROR,ESCAPE_ERROR,
LACK_QUOTE,PERCENT_ERROR,UNKNOWN_LITERAL};
string errorstring;
private: // function
/// 顯示who所代表的錯誤信息.
Void showErr(errortype who);
};
#endif//__LEX_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -