C语言和设计模式(解释器模式)
2012-01-06 21:20
441 查看
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。
typedef struct _Interpret { int type; void* (*process)(void* pData, int* type, int* result); }Interpret;上面的数据结构比较简单,但是很能说明问题。就拿变量来说吧,这里就可以定义成字母的解释器、数字解释器、下划线解释器三种形式。所以,我们可以进一步定义一下process的相关函数。
#define DIGITAL_TYPE 1 #define LETTER_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语言和设计模式(解释器模式)
- 12、C语言和设计模式(解释器模式)
- 05.C语言和设计模式(解释器模式)
- C语言设计模式:解释器 //tbd
- C语言和设计模式(解释器模式)
- 设计模式——解释器模式
- Python的行为设计模式之解释器模式的 eval
- 设计模式之(二十)解释器模式Interpreter
- 设计模式之15 - 解释器模式Interpreter
- JAVA设计模式十五:--Interpreter(解释器模式)
- 【Unity与23种设计模式】解释器模式(Interpreter)
- C语言和设计模式(工厂模式)
- C语言和设计模式(总结篇)
- 【设计模式】解释器模式
- 23种设计模式(14):解释器模式
- C语言和设计模式(迭代器模式)
- php设计模式专题附源码(解释器模式、工厂方法模式、外观模式、装饰模式、建造者模式)
- 设计模式 行为模式 责任链 c语言 版本实现
- 设计模式初探 行为模式 观察者模式 c语言 版本实现
- C语言和设计模式(桥接模式)