mirror of
https://github.com/corda/corda.git
synced 2025-01-22 12:28:11 +00:00
Regex: let toString() in the Compiler reconstruct the regex
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
parent
c975e25864
commit
9e7169fe34
@ -41,6 +41,36 @@ class CharacterMatcher {
|
|||||||
return (map.length > index && map[index]) ^ inversePattern;
|
return (map.length > index && map[index]) ^ inversePattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("[");
|
||||||
|
if (inversePattern) {
|
||||||
|
builder.append("^");
|
||||||
|
}
|
||||||
|
for (int i = 0; i < map.length; ++ i) {
|
||||||
|
if (!map[i]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
builder.append(i >= ' ' && i <= 0x7f ?
|
||||||
|
"" + (char)i : ("\\x" + Integer.toHexString(i)));
|
||||||
|
int j = i + 1;
|
||||||
|
while (j < map.length && map[j]) {
|
||||||
|
++ j;
|
||||||
|
}
|
||||||
|
-- j;
|
||||||
|
if (j > i) {
|
||||||
|
if (j > i + 1) {
|
||||||
|
builder.append('-');
|
||||||
|
}
|
||||||
|
builder.append(j >= ' ' && j <= 0x7f ?
|
||||||
|
"" + (char)j : ("\\x" + Integer.toHexString(j)));
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private static String specialClass(int c) {
|
private static String specialClass(int c) {
|
||||||
if ('d' == c) {
|
if ('d' == c) {
|
||||||
return "[0-9]";
|
return "[0-9]";
|
||||||
|
@ -106,6 +106,10 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
output.add(CHARACTER_CLASS);
|
output.add(CHARACTER_CLASS);
|
||||||
output.add(output.addClass(characterClass));
|
output.add(output.addClass(characterClass));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return characterClass.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Repeat extends Expression {
|
private class Repeat extends Expression {
|
||||||
@ -169,6 +173,18 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
String qualifier = greedy ? "" : "?";
|
||||||
|
if (minCount == 0 && maxCount < 2) {
|
||||||
|
return expr.toString() + (minCount < 0 ? "*" : "?") + qualifier;
|
||||||
|
}
|
||||||
|
if (minCount == 1 && maxCount < 0) {
|
||||||
|
return expr.toString() + "+" + qualifier;
|
||||||
|
}
|
||||||
|
return expr.toString() + "{" + minCount + ","
|
||||||
|
+ (maxCount < 0 ? "" : "" + maxCount) + "}" + qualifier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Group extends Expression {
|
private class Group extends Expression {
|
||||||
@ -193,6 +209,26 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
public void writeCode(Output output) {
|
public void writeCode(Output output) {
|
||||||
output.add(c);
|
output.add(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
if (c >= 0) {
|
||||||
|
return "" + (char)c;
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case DOT:
|
||||||
|
return ".";
|
||||||
|
case WORD_BOUNDARY:
|
||||||
|
return "\\b";
|
||||||
|
case NON_WORD_BOUNDARY:
|
||||||
|
return "\\B";
|
||||||
|
case LINE_START:
|
||||||
|
return "^";
|
||||||
|
case LINE_END:
|
||||||
|
return "$";
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unhandled opcode: " + c);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,6 +278,28 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
output.add(2 * groupIndex + 1);
|
output.add(2 * groupIndex + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
if (alternatives != null || list.size() > 1) {
|
||||||
|
builder.append('(');
|
||||||
|
if (!capturing) {
|
||||||
|
builder.append("?:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (alternatives != null) {
|
||||||
|
for (Group alternative : alternatives) {
|
||||||
|
builder.append(alternative).append('|');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Expression expr : list) {
|
||||||
|
builder.append(expr);
|
||||||
|
}
|
||||||
|
if (alternatives != null || list.size() > 1) {
|
||||||
|
builder.append(')');
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Lookaround extends Expression {
|
private class Lookaround extends Expression {
|
||||||
@ -264,6 +322,16 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
(negative ? NEGATIVE_LOOKAHEAD : LOOKBEHIND));
|
(negative ? NEGATIVE_LOOKAHEAD : LOOKBEHIND));
|
||||||
output.add(output.addLookaround(vm));
|
output.add(output.addLookaround(vm));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
String inner = group.toString();
|
||||||
|
if (inner.startsWith("(?:")) {
|
||||||
|
inner = inner.substring(3);
|
||||||
|
} else {
|
||||||
|
inner += ")";
|
||||||
|
}
|
||||||
|
return "(?=" + inner;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Group0 extends Expression {
|
private class Group0 extends Expression {
|
||||||
@ -284,6 +352,12 @@ class Compiler implements PikeVMOpcodes {
|
|||||||
output.markFindPreambleEnd();
|
output.markFindPreambleEnd();
|
||||||
group.writeCode(output);
|
group.writeCode(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
String inner = group.toString();
|
||||||
|
return inner.startsWith("(?:") && inner.endsWith(")") ?
|
||||||
|
inner.substring(1, inner.length() - 1) : inner;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Group0 root;
|
private Group0 root;
|
||||||
|
Loading…
Reference in New Issue
Block a user