📄 symbols.h
字号:
/*
符号类及符号表类
编写时间:2007-10-30
修改时间:2007-11-1
*/
#ifndef SYMBOLS_H
#define SYMBOLS_H
#include <map>
#include <vector>
#include <string>
#include <fstream>
#include <boost/lexical_cast.hpp>
#include "data_type.h"
#define MISDEEM(A) if(A) return false
using namespace std;
using namespace boost;
/*#######################################################*/
//计算出的长度如果是无符号数时的长度,如果为有符号数的长度
struct DataLen{
DataLen():ulen(0),len(0){};
int ulen;
int len;
};
/*#######################################################*/
//用于保存变量或常量的各种参数
class TypeAttr{
public:
typedef enum{ISUNSIGNED,ISSINGED,UNKNOWN} SIGNED;//判断是否是无符号数。
/*构造函数*/
public:
TypeAttr():
m_type(NULL_T),
isInt(false),
isDouble(false),
m_signed(UNKNOWN){}
TypeAttr(const TypeAttr& type):
value(type.value),
isInt(type.isInt),
isDouble(type.isDouble),
m_type(type.m_type),
m_signed(type.m_signed) { length.ulen=type.length.ulen; length.len=type.length.len;}
/*成员变量-----属性值*/
public:
string value; //:所有的数据最终都可以存储为字符串。
DataLen length; //:数据所占的字节数。
bool isInt; //:是否属于int数据类型
bool isDouble; //:是否属于double数据类型
MY_TYPE m_type; //:类型,不能确定时是NULL_T,
SIGNED m_signed; //:是否为无符号数,不能确定时为UNKNOWN。
/*成员函数-----行为值*/
public:
void SetType(MY_TYPE); //:设置数据类型
void SetValue(string); //:设置属性值
bool IsConvertable(TypeAttr t); //:判断是否可以将其赋值给t
void BitToStr(); //:将Value值由位类型转换为1或0的字符串
bool BitsToStr(); //:将value值由位串类型转换为0或1组成的字符串
void IsInt(); //:设置isInt为true
void IsDouble(); //:设置isDouble为true
void HexToStr(); //:将value值由16进制整型字符串转换为整数
void CharToStr(); //:将value值由字符型去掉单引号。
void StrToStr(); //:将value值由字符串型去掉双引号
void CalcLen(); // 计算数据所占的空间大小。
};
/*#######################################################*/
/*符号类*/
class CSymbol{
/*构造函数*/
public:
CSymbol(TypeAttr t):m_attr(t){id=ID++;}
/*成员变量-----属性值*/
protected:
TypeAttr m_attr;
static int ID; //静态变量,为属于该类的所有对象所共有。
int id; //非静态变量为单个对象所有。
/*成员函数-----行为值*/
public:
TypeAttr GetAttr(){return m_attr;} //获取类型属性
int GetId(){return id;} //获取ID
void SetSymValue(string value){m_attr.value=value;}
};
/*############################################-*/
/*-----------------------符号表类----------------------*/
/*############################################*/
class CSymTable{
public:
typedef map<string,CSymbol*> SymbolMap;
/*构造函数,析构函数*/
public:
CSymTable():size(0){};
~CSymTable();
protected:
SymbolMap m_table;
int size;//所占空间总大小
public:
void AddSymb(TypeAttr t,string id,string value=""); //向符号表添加变量
void SetSymValue(string id,string value); //设置变量值
CSymbol* GetSymb(string); //查询符号
void SaveData(string file_name); //将数据写入配置文件中
bool CheckEmpty(string& warnings); //如果存在未使用的变量值,将warning信息输出
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -