921 |
|
|
922 |
if (start == NULL) |
if (start == NULL) |
923 |
{ |
{ |
924 |
printf ("(null)\n"); |
fprintf (stderr, "(null)\n"); |
925 |
return; |
return; |
926 |
} |
} |
927 |
|
|
928 |
/* Loop over pattern commands. */ |
/* Loop over pattern commands. */ |
929 |
while (p < pend) |
while (p < pend) |
930 |
{ |
{ |
931 |
printf ("%d:\t", p - start); |
fprintf (stderr, "%d:\t", p - start); |
932 |
|
|
933 |
switch ((re_opcode_t) *p++) |
switch ((re_opcode_t) *p++) |
934 |
{ |
{ |
935 |
case no_op: |
case no_op: |
936 |
printf ("/no_op"); |
fprintf (stderr, "/no_op"); |
937 |
break; |
break; |
938 |
|
|
939 |
case succeed: |
case succeed: |
940 |
printf ("/succeed"); |
fprintf (stderr, "/succeed"); |
941 |
break; |
break; |
942 |
|
|
943 |
case exactn: |
case exactn: |
944 |
mcnt = *p++; |
mcnt = *p++; |
945 |
printf ("/exactn/%d", mcnt); |
fprintf (stderr, "/exactn/%d", mcnt); |
946 |
do |
do |
947 |
{ |
{ |
948 |
putchar ('/'); |
fprintf (stderr, "/%c", *p++); |
|
putchar (*p++); |
|
949 |
} |
} |
950 |
while (--mcnt); |
while (--mcnt); |
951 |
break; |
break; |
952 |
|
|
953 |
case start_memory: |
case start_memory: |
954 |
printf ("/start_memory/%d", *p++); |
fprintf (stderr, "/start_memory/%d", *p++); |
955 |
break; |
break; |
956 |
|
|
957 |
case stop_memory: |
case stop_memory: |
958 |
printf ("/stop_memory/%d", *p++); |
fprintf (stderr, "/stop_memory/%d", *p++); |
959 |
break; |
break; |
960 |
|
|
961 |
case duplicate: |
case duplicate: |
962 |
printf ("/duplicate/%d", *p++); |
fprintf (stderr, "/duplicate/%d", *p++); |
963 |
break; |
break; |
964 |
|
|
965 |
case anychar: |
case anychar: |
966 |
printf ("/anychar"); |
fprintf (stderr, "/anychar"); |
967 |
break; |
break; |
968 |
|
|
969 |
case charset: |
case charset: |
974 |
int length = CHARSET_BITMAP_SIZE (p - 1); |
int length = CHARSET_BITMAP_SIZE (p - 1); |
975 |
int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1); |
int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1); |
976 |
|
|
977 |
printf ("/charset [%s", |
fprintf (stderr, "/charset [%s", |
978 |
(re_opcode_t) *(p - 1) == charset_not ? "^" : ""); |
(re_opcode_t) *(p - 1) == charset_not ? "^" : ""); |
979 |
|
|
980 |
assert (p + *p < pend); |
assert (p + *p < pend); |
986 |
/* Are we starting a range? */ |
/* Are we starting a range? */ |
987 |
if (last + 1 == c && ! in_range) |
if (last + 1 == c && ! in_range) |
988 |
{ |
{ |
989 |
putchar ('-'); |
fprintf (stderr, "-"); |
990 |
in_range = 1; |
in_range = 1; |
991 |
} |
} |
992 |
/* Have we broken a range? */ |
/* Have we broken a range? */ |
993 |
else if (last + 1 != c && in_range) |
else if (last + 1 != c && in_range) |
994 |
{ |
{ |
995 |
putchar (last); |
fprintf (stderr, "%c", last); |
996 |
in_range = 0; |
in_range = 0; |
997 |
} |
} |
998 |
|
|
999 |
if (! in_range) |
if (! in_range) |
1000 |
putchar (c); |
fprintf (stderr, "%c", c); |
1001 |
|
|
1002 |
last = c; |
last = c; |
1003 |
} |
} |
1004 |
|
|
1005 |
if (in_range) |
if (in_range) |
1006 |
putchar (last); |
fprintf (stderr, "%c", last); |
1007 |
|
|
1008 |
putchar (']'); |
fprintf (stderr, "]"); |
1009 |
|
|
1010 |
p += 1 + length; |
p += 1 + length; |
1011 |
|
|
1012 |
if (has_range_table) |
if (has_range_table) |
1013 |
{ |
{ |
1014 |
int count; |
int count; |
1015 |
printf ("has-range-table"); |
fprintf (stderr, "has-range-table"); |
1016 |
|
|
1017 |
/* ??? Should print the range table; for now, just skip it. */ |
/* ??? Should print the range table; for now, just skip it. */ |
1018 |
p += 2; /* skip range table bits */ |
p += 2; /* skip range table bits */ |
1023 |
break; |
break; |
1024 |
|
|
1025 |
case begline: |
case begline: |
1026 |
printf ("/begline"); |
fprintf (stderr, "/begline"); |
1027 |
break; |
break; |
1028 |
|
|
1029 |
case endline: |
case endline: |
1030 |
printf ("/endline"); |
fprintf (stderr, "/endline"); |
1031 |
break; |
break; |
1032 |
|
|
1033 |
case on_failure_jump: |
case on_failure_jump: |
1034 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1035 |
printf ("/on_failure_jump to %d", p + mcnt - start); |
fprintf (stderr, "/on_failure_jump to %d", p + mcnt - start); |
1036 |
break; |
break; |
1037 |
|
|
1038 |
case on_failure_keep_string_jump: |
case on_failure_keep_string_jump: |
1039 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1040 |
printf ("/on_failure_keep_string_jump to %d", p + mcnt - start); |
fprintf (stderr, "/on_failure_keep_string_jump to %d", p + mcnt - start); |
1041 |
break; |
break; |
1042 |
|
|
1043 |
case on_failure_jump_nastyloop: |
case on_failure_jump_nastyloop: |
1044 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1045 |
printf ("/on_failure_jump_nastyloop to %d", p + mcnt - start); |
fprintf (stderr, "/on_failure_jump_nastyloop to %d", p + mcnt - start); |
1046 |
break; |
break; |
1047 |
|
|
1048 |
case on_failure_jump_loop: |
case on_failure_jump_loop: |
1049 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1050 |
printf ("/on_failure_jump_loop to %d", p + mcnt - start); |
fprintf (stderr, "/on_failure_jump_loop to %d", p + mcnt - start); |
1051 |
break; |
break; |
1052 |
|
|
1053 |
case on_failure_jump_smart: |
case on_failure_jump_smart: |
1054 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1055 |
printf ("/on_failure_jump_smart to %d", p + mcnt - start); |
fprintf (stderr, "/on_failure_jump_smart to %d", p + mcnt - start); |
1056 |
break; |
break; |
1057 |
|
|
1058 |
case jump: |
case jump: |
1059 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1060 |
printf ("/jump to %d", p + mcnt - start); |
fprintf (stderr, "/jump to %d", p + mcnt - start); |
1061 |
break; |
break; |
1062 |
|
|
1063 |
case succeed_n: |
case succeed_n: |
1064 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1065 |
extract_number_and_incr (&mcnt2, &p); |
extract_number_and_incr (&mcnt2, &p); |
1066 |
printf ("/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
fprintf (stderr, "/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
1067 |
break; |
break; |
1068 |
|
|
1069 |
case jump_n: |
case jump_n: |
1070 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1071 |
extract_number_and_incr (&mcnt2, &p); |
extract_number_and_incr (&mcnt2, &p); |
1072 |
printf ("/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
fprintf (stderr, "/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
1073 |
break; |
break; |
1074 |
|
|
1075 |
case set_number_at: |
case set_number_at: |
1076 |
extract_number_and_incr (&mcnt, &p); |
extract_number_and_incr (&mcnt, &p); |
1077 |
extract_number_and_incr (&mcnt2, &p); |
extract_number_and_incr (&mcnt2, &p); |
1078 |
printf ("/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2); |
fprintf (stderr, "/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2); |
1079 |
break; |
break; |
1080 |
|
|
1081 |
case wordbound: |
case wordbound: |
1082 |
printf ("/wordbound"); |
fprintf (stderr, "/wordbound"); |
1083 |
break; |
break; |
1084 |
|
|
1085 |
case notwordbound: |
case notwordbound: |
1086 |
printf ("/notwordbound"); |
fprintf (stderr, "/notwordbound"); |
1087 |
break; |
break; |
1088 |
|
|
1089 |
case wordbeg: |
case wordbeg: |
1090 |
printf ("/wordbeg"); |
fprintf (stderr, "/wordbeg"); |
1091 |
break; |
break; |
1092 |
|
|
1093 |
case wordend: |
case wordend: |
1094 |
printf ("/wordend"); |
fprintf (stderr, "/wordend"); |
1095 |
|
|
1096 |
case syntaxspec: |
case syntaxspec: |
1097 |
printf ("/syntaxspec"); |
fprintf (stderr, "/syntaxspec"); |
1098 |
mcnt = *p++; |
mcnt = *p++; |
1099 |
printf ("/%d", mcnt); |
fprintf (stderr, "/%d", mcnt); |
1100 |
break; |
break; |
1101 |
|
|
1102 |
case notsyntaxspec: |
case notsyntaxspec: |
1103 |
printf ("/notsyntaxspec"); |
fprintf (stderr, "/notsyntaxspec"); |
1104 |
mcnt = *p++; |
mcnt = *p++; |
1105 |
printf ("/%d", mcnt); |
fprintf (stderr, "/%d", mcnt); |
1106 |
break; |
break; |
1107 |
|
|
1108 |
# ifdef emacs |
# ifdef emacs |
1109 |
case before_dot: |
case before_dot: |
1110 |
printf ("/before_dot"); |
fprintf (stderr, "/before_dot"); |
1111 |
break; |
break; |
1112 |
|
|
1113 |
case at_dot: |
case at_dot: |
1114 |
printf ("/at_dot"); |
fprintf (stderr, "/at_dot"); |
1115 |
break; |
break; |
1116 |
|
|
1117 |
case after_dot: |
case after_dot: |
1118 |
printf ("/after_dot"); |
fprintf (stderr, "/after_dot"); |
1119 |
break; |
break; |
1120 |
|
|
1121 |
case categoryspec: |
case categoryspec: |
1122 |
printf ("/categoryspec"); |
fprintf (stderr, "/categoryspec"); |
1123 |
mcnt = *p++; |
mcnt = *p++; |
1124 |
printf ("/%d", mcnt); |
fprintf (stderr, "/%d", mcnt); |
1125 |
break; |
break; |
1126 |
|
|
1127 |
case notcategoryspec: |
case notcategoryspec: |
1128 |
printf ("/notcategoryspec"); |
fprintf (stderr, "/notcategoryspec"); |
1129 |
mcnt = *p++; |
mcnt = *p++; |
1130 |
printf ("/%d", mcnt); |
fprintf (stderr, "/%d", mcnt); |
1131 |
break; |
break; |
1132 |
# endif /* emacs */ |
# endif /* emacs */ |
1133 |
|
|
1134 |
case begbuf: |
case begbuf: |
1135 |
printf ("/begbuf"); |
fprintf (stderr, "/begbuf"); |
1136 |
break; |
break; |
1137 |
|
|
1138 |
case endbuf: |
case endbuf: |
1139 |
printf ("/endbuf"); |
fprintf (stderr, "/endbuf"); |
1140 |
break; |
break; |
1141 |
|
|
1142 |
default: |
default: |
1143 |
printf ("?%d", *(p-1)); |
fprintf (stderr, "?%d", *(p-1)); |
1144 |
} |
} |
1145 |
|
|
1146 |
putchar ('\n'); |
fprintf (stderr, "\n"); |
1147 |
} |
} |
1148 |
|
|
1149 |
printf ("%d:\tend of pattern.\n", p - start); |
fprintf (stderr, "%d:\tend of pattern.\n", p - start); |
1150 |
} |
} |
1151 |
|
|
1152 |
|
|