12、C语言和设计模式(解释器模式)
来源:互联网 发布:python的idey 编辑:程序博客网 时间:2024/04/30 06:35
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
上面的数据结构比较简单,但是很能说明问题。就拿变量来说吧,这里就可以定义成字母的解释器、数字解释器、下划线解释器三种形式。所以,我们可以进一步定义一下process的相关函数。
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。
- typedef struct _Interpret
- {
- int type;
- void* (*process)(void* pData, int* type, int* result);
- }Interpret;
- #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;
- }
0 0
- 12、C语言和设计模式(解释器模式)
- C语言和设计模式(解释器模式)
- C语言和设计模式(解释器模式)
- C语言和设计模式(解释器模式)
- 05.C语言和设计模式(解释器模式)
- C语言设计模式:解释器 //tbd
- C语言和设计模式(解释器模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- 12、C语言和设计模式(代理模式)
- C语言和设计模式
- C语言和设计模式
- C语言和设计模式
- C语言和设计模式(之单件模式)
- C语言和设计模式(之原型模式)
- C语言和设计模式(之组合模式)
- C语言和设计模式(之模板模式)
- C语言和设计模式(之原型模式)
- C语言和设计模式(工厂模式)
- C语言和设计模式(责任链模式)
- dave sdk ——信号和连接
- HDU 5364 Distribution money——BestCoder Round #50(div.2)
- The mook jong-dp
- 加密的操作类,包含判断是否加密
- Android Studio快捷键
- 12、C语言和设计模式(解释器模式)
- 如何在window上把你的项目提交到github
- getopt函数的使用
- Android 中odex转成dex
- hdu 5364 Distribution money
- Distribution money(水题--模拟)
- Material Design调色板
- 一个码农对软件项目基层人员管理的思考——会议篇
- 乱评赢在中国之蓝天碧水间系列