05.C语言和设计模式(解释器模式)
2014-06-25 09:30
357 查看
原文地址:http://blog.csdn.net/feixiaoxing/article/details/7182466
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。
[cpp] view
plaincopy
typedef struct _Interpret
{
int type;
void* (*process)(void* pData, int* type, int* result);
}Interpret;
上面的数据结构比较简单,但是很能说明问题。就拿变量来说吧,这里就可以定义成字母的解释器、数字解释器、下划线解释器三种形式。所以,我们可以进一步定义一下process的相关函数。
[cpp] view
plaincopy
#define DIGITAL_TYPE 1
#define LET
4000
TER_TYPE 2
#define BOTTOM_LINE 3
void* digital_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while (*str >= '0' && *str <= '9')
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str == '_')
{
*result = TRUE;
*type = BOTTOM_TYPE;
return str;
}
if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
*result = TRUE;
*type = LETTER_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
void* letter_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while (*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str == '_')
{
*result = TRUE;
*type = BOTTOM_TYPE;
return str;
}
if(*str >= '0' && *str <= '9')
{
*result = TRUE;
*type = DIGITAL_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
void* bottom_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while ('_' == *str )
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
*result = TRUE;
*type = LETTER_TYPE;
return str;
}
if(*str >= '0' && *str <= '9')
{
*result = TRUE;
*type = DIGITAL_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。
[cpp] view
plaincopy
typedef struct _Interpret
{
int type;
void* (*process)(void* pData, int* type, int* result);
}Interpret;
上面的数据结构比较简单,但是很能说明问题。就拿变量来说吧,这里就可以定义成字母的解释器、数字解释器、下划线解释器三种形式。所以,我们可以进一步定义一下process的相关函数。
[cpp] view
plaincopy
#define DIGITAL_TYPE 1
#define LET
4000
TER_TYPE 2
#define BOTTOM_LINE 3
void* digital_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while (*str >= '0' && *str <= '9')
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str == '_')
{
*result = TRUE;
*type = BOTTOM_TYPE;
return str;
}
if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
*result = TRUE;
*type = LETTER_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
void* letter_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while (*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str == '_')
{
*result = TRUE;
*type = BOTTOM_TYPE;
return str;
}
if(*str >= '0' && *str <= '9')
{
*result = TRUE;
*type = DIGITAL_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
void* bottom_process(void* pData, int* type, int* result)
{
UINT8* str;
assert(NULL != pData && NULL != type && NULL != result);
str = (UNT8*)pData;
while ('_' == *str )
{
str ++;
}
if(*str == '\0')
{
*result = TRUE;
return NULL;
}
if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z')
{
*result = TRUE;
*type = LETTER_TYPE;
return str;
}
if(*str >= '0' && *str <= '9')
{
*result = TRUE;
*type = DIGITAL_TYPE;
return str;
}
*result = FALSE;
return NULL;
}
相关文章推荐
- C语言和设计模式(解释器模式)
- C语言和设计模式(解释器模式)
- 12、C语言和设计模式(解释器模式)
- C语言和设计模式(之模板模式) 05
- C语言设计模式:解释器 //tbd
- C语言和设计模式(解释器模式)
- 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)
- [导入]C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释器模式.zip(9.14 MB)
- 设计模式笔记(16)---解释器模式(行为型)
- 设计模式笔记(16)---解释器模式(行为型)
- 设计模式--解释器模式(Interpreter)
- 设计模式——解释器模式
- 设计模式笔记 15. Interpreter 解释器模式(行为型模式)
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式循序渐进(9)解释器模式 Interpreter
- 设计模式学习(十二)职责链模式-命令模式-解释器模式
- 设计模式笔记(16)---解释器模式(行为型)
- 设计模式之Interpreter(解释器)
- 设计模式--解释器模式(Interpreter)
- 设计模式之Interpreter(解释器)