added SAVE, WILDCARD
[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 6826]
This commit is contained in:
parent
7cf42fe4dd
commit
43278cf701
|
@ -46,6 +46,8 @@ public class Bytecode {
|
|||
public static final short MATCH16 = 5;
|
||||
public static final short RANGE8 = 6;
|
||||
public static final short RANGE16 = 7;
|
||||
public static final short WILDCARD = 8;
|
||||
public static final short SAVE = 9;
|
||||
|
||||
/** Used for disassembly; describes instruction set */
|
||||
public static Instruction[] instructions = new Instruction[] {
|
||||
|
@ -56,7 +58,9 @@ public class Bytecode {
|
|||
new Instruction("match8", OperandType.BYTE),
|
||||
new Instruction("match16", OperandType.CHAR),
|
||||
new Instruction("range8", OperandType.BYTE, OperandType.BYTE),
|
||||
new Instruction("range16", OperandType.CHAR, OperandType.CHAR)
|
||||
new Instruction("range16", OperandType.CHAR, OperandType.CHAR),
|
||||
new Instruction("wildcard"),
|
||||
new Instruction("save", OperandType.SHORT),
|
||||
};
|
||||
|
||||
public static String disassemble(byte[] code, int start) {
|
||||
|
|
|
@ -185,7 +185,7 @@ workLoop:
|
|||
public int execThompson(CharStream input, int ip) {
|
||||
int c = input.LA(1);
|
||||
if ( c==Token.EOF ) return Token.EOF;
|
||||
|
||||
|
||||
List<Integer> closure = new ArrayList<Integer>();
|
||||
List<Integer> reach = new ArrayList<Integer>();
|
||||
int prevAcceptAddr = Integer.MAX_VALUE;
|
||||
|
@ -265,7 +265,7 @@ processOneChar:
|
|||
|
||||
void addToClosure(List<Integer> closure, int ip) {
|
||||
//System.out.println("add to closure "+ip+" "+closure);
|
||||
if ( closure.contains(ip) ) return;
|
||||
if ( closure.contains(ip) ) return; // TODO: VERY INEFFICIENT! use int[num-states] as set test
|
||||
closure.add(ip);
|
||||
short opcode = code[ip];
|
||||
ip++; // move to next instruction or first byte of operand
|
||||
|
@ -273,6 +273,12 @@ processOneChar:
|
|||
case Bytecode.JMP :
|
||||
addToClosure(closure, getShort(code, ip));
|
||||
break;
|
||||
case Bytecode.SAVE :
|
||||
int labelIndex = getShort(code, ip);
|
||||
ip += 2;
|
||||
addToClosure(closure, ip); // do closure pass SAVE
|
||||
// TODO: impl
|
||||
break;
|
||||
case Bytecode.SPLIT :
|
||||
int nopnds = getShort(code, ip);
|
||||
ip += 2;
|
||||
|
|
Loading…
Reference in New Issue