如果能力够的话可以写一个自创的小型语言编译器或解释器,保准通过。 具体你可以参考Brainfuck语言的源代码 #include <>#include <>char g_DataBlock[30000] = {0}; // 堆数据区char g_CodeSegment[100000]; // BF代码指令区int g_CodeLen = 0; // 代码指令长度,尾指针int g_Stack[100]; // 栈,当进入'[',']'时用于维护指令指针int g_StackLen = 0; // 栈指针int analysis(); // 解析指令int main(int argc, char **argv){FILE* fSrcCodeFile; // 用于读去源代码文件if (argc == 2) {fSrcCodeFile = fopen(argv[1], "r");if (fSrcCodeFile == NULL) {perror("fopen");return 1;} while (fread(&g_CodeSegment[g_CodeLen], 1, 1, fSrcCodeFile) == 1) {// 从源文件中读取代码指令g_CodeLen++; }} else{fprintf(stderr, "%s:%d\n", __FILE__, __LINE__);return 2;} // end of if (argc == 2) fclose(fSrcCodeFile); setbuf(stdout, NULL); return analysis(); // 解析指令}int analysis(){int iCurrCodePos = 0; // 当前指令位置char* pCurrData = g_DataBlock + 10000; // 让当前指针指向数据区10000号单元,以便在指针的前后都是有效操作区域 while (iCurrCodePos < g_CodeLen) {switch (g_CodeSegment[iCurrCodePos]) { // 解析指令动作case '+': // 当前数据加1++(*pCurrData);break;case '-': // 当前数据减1--(*pCurrData);break;case '>': // 指针右移动,向前移动++pCurrData;break;case '<': // 指针做移动,向后移动--pCurrData;break;case '.': // 数据当前数据putchar((int)(*pCurrData));//printf("put:%hd\n",*p);break;case ',': // 从IO获取一个输入作为当前数据*pCurrData = getchar();break;case '[': // 循环指令处理if (*pCurrData) {// 当前数据不为0,将指令指针压入栈中g_Stack[g_StackLen++] = iCurrCodePos;}else { // 当前数据为0,找到与其匹配的']',然后开始执行']'后的指令int j, k;for (k = iCurrCodePos, j = 0; k < g_CodeLen; k++) {g_CodeSegment[k] == '[' && j++;g_CodeSegment[k] == ']' && j--;if (j == 0) // 找到匹配的']', 退出循环break;} if (j == 0){ // for循环因找到匹配的']'而退出iCurrCodePos = k;}else {fprintf(stderr, "%s:%d\n" ,__FILE__, __LINE__);return 3;}} // end of if(*p) break;case ']': // 从栈里获得指令指针,跳转到对应的'['位置iCurrCodePos = g_Stack[g_StackLen - 1]; // 取出栈顶保存的指令指针,作为当前指针iCurrCodePos -= 1; // 指令指针后退一位,指向上一条指令。(此处减1的原因的下一条语句要加加—— ++iCurrCodePos;)--g_StackLen; // 移动栈指针break;default:break;} // end of switch (g_CodeSegment[iCurrCodePos]) ++iCurrCodePos; } // end of while (iCurrCodePos < g_CodeLen) return 0;}