这里只是当作自己的代码版本管理器使用,并不去详细介绍代码,毕竟我的注释里面已经说明了很多。
欢迎大家测试,如果发现出错了,望在下面回复,多谢。
注意,当前的假定是输入自己不能有错误,而且*、(、)、.、|这几个操作符是保留字,其他的字符则当作其自身意思。当前不考虑转义字符及三元组,以及不考虑子表达式命名,因此只能处理一个长正则表达式。
1 #include <stdio.h> 2 #include <string.h> 3 #include <malloc.h> 4 //这里只处理最简单的正则表达式,即包括括号,星号运算,连接运算和分支运算,这里分支运算在压栈是是一个点号 5 //其中括号优先级最大,其次是星号运算其次是连接运算最后是分支运算 6 //当前版本只是把一个简单的正则表达式的优先级理清 7 #define STRICT 8 //strict 的意思就是不要求显示的写出.运算符 ,因为在缺少这个运算符的情况下,我们还是可以推断出来这个 9 //运算符是存在的 ,例如 在)及 *及非运算符之后如果存在字母则是缺少连接符,我们可以自己加上去 10 int is_operator(char for_in) 11 { 12 switch(for_in) 13 { 14 case'(': 15 case')': 16 case'.': 17 case'*': 18 case'|': 19 return 1; 20 default: return 0; 21 } 22 } 23 int main(void) 24 { 25 int token[100]; 26 int token_pointer; 27 char reg_operator[100]; 28 int reg_operator_pointer; 29 int name_number; 30 int input_pointer; 31 char reg_input[20]; 32 reg_operator_pointer=name_number=token_pointer=0; 33 for(input_pointer=0;input_pointer<100;input_pointer++)//初始化堆栈 34 { 35 reg_operator[input_pointer]='