kmy.regex.jvm
Class RJavaClassMachine

java.lang.Object
  |
  +--kmy.regex.compiler.RMachine
        |
        +--kmy.regex.jvm.RJavaClassMachine

public class RJavaClassMachine
extends RMachine
implements CharClassCodes, TokenConst

This class is RMachine that compiles regex instructions into JVM bytecode.


Inner Class Summary
(package private) static class RJavaClassMachine.Label
           
(package private) static class RJavaClassMachine.Loader
           
 
Field Summary
private  RLocalAllocator allocator
           
(package private)  java.lang.String charArrArrType
           
(package private)  java.lang.String charArrType
           
(package private)  java.lang.String charType
           
(package private)  java.lang.Class compiledClass
           
(package private)  java.lang.String compiledFrom
           
(package private) static int counter
           
(package private) static java.lang.Object counterLock
           
private  RJavaClassCustomizer customizer
           
(package private)  boolean embed
           
(package private)  boolean embedSearch
           
(package private)  int extCells
           
(package private)  int[] extVarRegs
           
(package private)  AbstractMark failMark
           
(package private)  int flags
           
(package private)  CodeGenerator gen
           
static int I_BEGIN
           
static int I_CELLS
           
static int I_END
           
static int I_FORKPTR
           
static int I_FORKS
           
static int I_HEAD
           
static int I_MAXSTART
           
static int I_START
           
static int I_STRING
           
(package private)  int initStackDepth
           
(package private)  boolean loadClass
           
(package private) static RJavaClassMachine.Loader loader
           
(package private)  AbstractMark matchFailedMark
           
(package private)  AbstractMark matchSucceededMark
           
(package private)  int maxLength
           
(package private)  int maxLocalVariable
           
(package private)  int mfHeadDecrement
           
(package private)  int mfMinCount
           
(package private)  AbstractMark mfSaveFailMark
           
(package private)  AbstractMark mfStartMark
           
(package private)  int minLength
           
private static java.lang.Integer MINUS_ONE
           
(package private)  boolean noRefiller
           
static int NVARS
           
private static java.lang.Integer ONE
           
(package private)  AbstractMark reallocMark
           
(package private) static java.lang.String refillerClass
           
(package private) static java.lang.String refillerType
           
(package private)  AbstractMark refillMark
           
(package private) static java.lang.String refillSignature
           
(package private)  boolean reportPosition
           
(package private)  boolean saveBytecode
           
(package private)  AbstractMark saveMark
           
(package private)  AbstractMark startMark
           
(package private)  java.lang.String stringRep
           
(package private) static java.lang.String stubClass
           
(package private)  java.util.Vector switchTable
           
(package private)  java.lang.String thisClass
           
(package private)  java.lang.String thisType
           
private static java.lang.Integer THREE
           
private static java.lang.Integer TWO
           
(package private)  int V_BEGIN
           
(package private)  int V_CELLS
           
(package private)  int V_END
           
(package private)  int V_FORKPTR
           
(package private)  int V_FORKS
           
(package private)  int V_HEAD
           
(package private)  int V_HEADINC
           
(package private)  int V_MAXSTART
           
(package private)  int V_MFCOUNT
           
(package private)  int V_MFHEAD
           
(package private)  int V_REFILLER
           
(package private)  int V_RET1
           
(package private)  int V_START
           
(package private)  int V_STRING
           
(package private)  int V_TMP1
           
(package private)  int varCells
           
(package private)  java.util.Hashtable vars
           
private static java.lang.Integer ZERO
           
 
Fields inherited from class kmy.regex.compiler.RMachine
EXT_CONDJUMP, EXT_HINT, EXT_MULTIFORK, EXT_SHIFTTBL, extensions, FLAG_DOT_IS_ANY, HINT_CHAR_STAR_HEAD, HINT_END_ANCHORED, HINT_START_ANCHORED
 
Fields inherited from interface kmy.regex.tree.CharClassCodes
CLASS_ALL, CLASS_DISABLED, CLASS_LETTER, CLASS_LOWERCASE, CLASS_NONE, CLASS_NONLETTER, CLASS_NONLOWERCASE, CLASS_NONUPPERCASE, CLASS_UPPERCASE
 
Fields inherited from interface kmy.jint.constants.TokenConst
TOK_OPT_BUFFERONLY, TOK_OPT_DECLARE, TOK_OPT_GLOBAL, TOK_OPT_IGNORE, TOK_OPT_MULTILINE, TOK_OPT_OFFLINE, TOK_OPT_RETAINALL, TOK_OPT_SINGLELINE, TOK_OPT_STANDALONE, TOKEN_ABSTRACT, TOKEN_AE, TOKEN_AND, TOKEN_ANDE, TOKEN_BOOLEAN, TOKEN_BREAK, TOKEN_BYTE, TOKEN_BYVALUE, TOKEN_CASE, TOKEN_CATCH, TOKEN_CHAR, TOKEN_CLASS, TOKEN_CONST, TOKEN_CONTINUE, TOKEN_DEFAULT, TOKEN_DO, TOKEN_DOUBLE, TOKEN_EE, TOKEN_ELSE, TOKEN_EOF, TOKEN_EXTENDS, TOKEN_FALSE, TOKEN_FINAL, TOKEN_FINALLY, TOKEN_FLOAT, TOKEN_FOR, TOKEN_GE, TOKEN_GG, TOKEN_GGE, TOKEN_GGG, TOKEN_GGGE, TOKEN_GOTO, TOKEN_IF, TOKEN_IMPLEMENTS, TOKEN_IMPORT, TOKEN_INSTANCEOF, TOKEN_INT, TOKEN_INTERFACE, TOKEN_LE, TOKEN_LL, TOKEN_LLE, TOKEN_LONG, TOKEN_ME, TOKEN_MM, TOKEN_NATIVE, TOKEN_NE, TOKEN_NEW, TOKEN_NONE, TOKEN_NULL, TOKEN_OR, TOKEN_ORE, TOKEN_PACKAGE, TOKEN_PCE, TOKEN_PE, TOKEN_PP, TOKEN_PRIVATE, TOKEN_PROTECTED, TOKEN_PUBLIC, TOKEN_RETURN, TOKEN_SE, TOKEN_SHORT, TOKEN_SS, TOKEN_STATIC, TOKEN_SUPER, TOKEN_SWITCH, TOKEN_SYNCHRONIZED, TOKEN_TE, TOKEN_THIS, TOKEN_THREADSAFE, TOKEN_THROW, TOKEN_THROWS, TOKEN_TRANSIENT, TOKEN_TRUE, TOKEN_TRY, TOKEN_V_BOUND, TOKEN_V_CHAR, TOKEN_V_DOUBLE, TOKEN_V_FLOAT, TOKEN_V_FORM, TOKEN_V_INT, TOKEN_V_LONG, TOKEN_V_PATT, TOKEN_V_REGEX, TOKEN_V_STRING, TOKEN_V_SUBST, TOKEN_V_TRANS, TOKEN_VOID, TOKEN_VOLATILE, TOKEN_WHERE, TOKEN_WHILE, TOKEN_WORD, TOKEN_XE, UNARY_MINUS
 
Constructor Summary
RJavaClassMachine()
           
 
Method Summary
 void assert(char[] constStr)
           
 void assert(int charClass, char[] ranges)
          Make sure that current character belongs to the given character class.
 void assert(java.lang.String varName, boolean picked)
           
 void boundary(int type)
          Check if current position is on the certain type of boundary given by.
private  void checkSize(int n)
           
 void condJump(char[] ranges, RLabel label)
          Jump if char is NOT in range
 void condJump(char c, RLabel label)
          Jump if char is NOT one that is given.
 void condJump(int atLeast, int atMost, RLabel label)
          Jump if less then atLeast or more then atMost chars left.
 void decfail(RVariable var)
           
 void decjump(RVariable var, RLabel label)
           
 void embed(boolean search, CodeGenerator codeGen, RLocalAllocator alloc, int[] commVar, int[] extVars, AbstractMark fail, AbstractMark success)
           
 void fail()
           
 void finish()
           
 void forget(RVariable var)
           
 void fork(RLabel forkLabel)
          Add a fork record to backtracing stack.
private  void genRealloc()
           
 java.lang.String getClassName()
           
 int getExtVariableHandle(java.lang.String var)
           
 int getNVars()
           
 boolean getReportPosition()
           
 boolean getSaveBytecode()
           
 int getVariableHandle(java.lang.String var, boolean begin)
           
 void hardAssign(RVariable v, int value)
           
 void hint(int flags, int minLength, int maxLength)
           
 void init()
           
 void jump(RLabel label)
           
private  void jumpIfInRange(char[] ranges, AbstractMark inRange, AbstractMark notInRange)
           
 Regex makeRegex()
           
 void mark(RLabel label)
          Makes the given label to refer to the next RMachine instruction.
private  void maskJumpIfInRange(char[] ranges, int first, int last, AbstractMark inRange, AbstractMark notInRange)
           
 void mfEnd(int maxCount)
          maxCount got minCount subtracted from it!
 void mfStart(int headDecrement, int minCount)
           
 RLabel newLabel()
          Creates a new RMachine label.
 RVariable newTmpVar(int init)
          Creates a new RMachine temporary variable.
 RVariable newVar(java.lang.String name, boolean begin)
          Creates a new RMachine named variable.
 void pick(RVariable v)
          Store current character position (in the main buffer) into a given variable.
private  void refillIfHaveTo(AbstractMark refilled)
           
private  void refillIfHaveTo(int op, AbstractMark refilled, AbstractMark onFail)
           
private  void saveFields()
           
 void setClassName(java.lang.String name)
           
 void setCodeGenerator(CodeGenerator gen)
           
 void setCustomizer(RJavaClassCustomizer c)
           
 void setLoadClass(boolean needToLoadClass)
           
 void setNoRefiller(boolean noRefiller)
           
 void setReportPosition(boolean b)
           
 void setSaveBytecode(boolean b)
           
 void shiftTable(boolean beginning, int charsAhead, char[] chars, int[] shifts)
           
private  void simpleJumpIfInRange(char[] ranges, AbstractMark inRange, AbstractMark notInRange)
           
private  void simpleLocalAlloc()
           
 void skip()
          Increment current position by 1 (skip a character).
 void tellName(java.lang.String name)
          Provides string representation of this regular expression.
 void tellPosition(int pos)
          Informs RMachine about current character position in the regex.
 java.util.Enumeration variables()
           
 
Methods inherited from class kmy.regex.compiler.RMachine
getExtensions, setExtensions
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

stringRep

java.lang.String stringRep

vars

java.util.Hashtable vars

varCells

int varCells

extCells

int extCells

extVarRegs

int[] extVarRegs

minLength

int minLength

maxLength

int maxLength

flags

int flags

gen

CodeGenerator gen

switchTable

java.util.Vector switchTable

reallocMark

AbstractMark reallocMark

failMark

AbstractMark failMark

refillMark

AbstractMark refillMark

startMark

AbstractMark startMark

saveMark

AbstractMark saveMark

mfStartMark

AbstractMark mfStartMark

mfSaveFailMark

AbstractMark mfSaveFailMark

mfHeadDecrement

int mfHeadDecrement

mfMinCount

int mfMinCount

matchFailedMark

AbstractMark matchFailedMark

matchSucceededMark

AbstractMark matchSucceededMark

initStackDepth

int initStackDepth

V_HEAD

int V_HEAD

V_STRING

int V_STRING

V_CELLS

int V_CELLS

V_FORKS

int V_FORKS

V_FORKPTR

int V_FORKPTR

V_END

int V_END

V_REFILLER

int V_REFILLER

V_RET1

int V_RET1

V_TMP1

int V_TMP1

V_MFCOUNT

int V_MFCOUNT

V_MFHEAD

int V_MFHEAD

V_HEADINC

int V_HEADINC

V_START

int V_START

V_BEGIN

int V_BEGIN

V_MAXSTART

int V_MAXSTART

I_HEAD

public static int I_HEAD

I_STRING

public static int I_STRING

I_CELLS

public static int I_CELLS

I_FORKS

public static int I_FORKS

I_FORKPTR

public static int I_FORKPTR

I_BEGIN

public static int I_BEGIN

I_START

public static int I_START

I_END

public static int I_END

I_MAXSTART

public static int I_MAXSTART

NVARS

public static int NVARS

counterLock

static java.lang.Object counterLock

counter

static int counter

loader

static RJavaClassMachine.Loader loader

refillSignature

static java.lang.String refillSignature

stubClass

static java.lang.String stubClass

refillerClass

static java.lang.String refillerClass

refillerType

static java.lang.String refillerType

charType

java.lang.String charType

thisClass

java.lang.String thisClass

thisType

java.lang.String thisType

charArrType

java.lang.String charArrType

charArrArrType

java.lang.String charArrArrType

saveBytecode

boolean saveBytecode

loadClass

boolean loadClass

compiledClass

java.lang.Class compiledClass

compiledFrom

java.lang.String compiledFrom

embedSearch

boolean embedSearch

embed

boolean embed

noRefiller

boolean noRefiller

reportPosition

boolean reportPosition

ZERO

private static java.lang.Integer ZERO

ONE

private static java.lang.Integer ONE

TWO

private static java.lang.Integer TWO

THREE

private static java.lang.Integer THREE

MINUS_ONE

private static java.lang.Integer MINUS_ONE

maxLocalVariable

int maxLocalVariable

customizer

private RJavaClassCustomizer customizer

allocator

private RLocalAllocator allocator
Constructor Detail

RJavaClassMachine

public RJavaClassMachine()
Method Detail

simpleLocalAlloc

private void simpleLocalAlloc()

setNoRefiller

public void setNoRefiller(boolean noRefiller)
Overrides:
setNoRefiller in class RMachine

setCustomizer

public void setCustomizer(RJavaClassCustomizer c)

setCodeGenerator

public void setCodeGenerator(CodeGenerator gen)

setClassName

public void setClassName(java.lang.String name)

getClassName

public java.lang.String getClassName()

setLoadClass

public void setLoadClass(boolean needToLoadClass)

setSaveBytecode

public void setSaveBytecode(boolean b)

getSaveBytecode

public boolean getSaveBytecode()

setReportPosition

public void setReportPosition(boolean b)

getReportPosition

public boolean getReportPosition()

getVariableHandle

public int getVariableHandle(java.lang.String var,
                             boolean begin)

variables

public java.util.Enumeration variables()

getExtVariableHandle

public int getExtVariableHandle(java.lang.String var)

embed

public void embed(boolean search,
                  CodeGenerator codeGen,
                  RLocalAllocator alloc,
                  int[] commVar,
                  int[] extVars,
                  AbstractMark fail,
                  AbstractMark success)

init

public void init()
Overrides:
init in class RMachine

tellPosition

public void tellPosition(int pos)
Description copied from class: RMachine
Informs RMachine about current character position in the regex. It does not alter regex functionality. Can be used for debugging.
Overrides:
tellPosition in class RMachine

checkSize

private void checkSize(int n)
                throws java.io.IOException

saveFields

private void saveFields()
                 throws java.io.IOException

simpleJumpIfInRange

private void simpleJumpIfInRange(char[] ranges,
                                 AbstractMark inRange,
                                 AbstractMark notInRange)
                          throws java.io.IOException

maskJumpIfInRange

private void maskJumpIfInRange(char[] ranges,
                               int first,
                               int last,
                               AbstractMark inRange,
                               AbstractMark notInRange)
                        throws java.io.IOException

jumpIfInRange

private void jumpIfInRange(char[] ranges,
                           AbstractMark inRange,
                           AbstractMark notInRange)
                    throws java.io.IOException

refillIfHaveTo

private void refillIfHaveTo(AbstractMark refilled)
                     throws java.io.IOException

refillIfHaveTo

private void refillIfHaveTo(int op,
                            AbstractMark refilled,
                            AbstractMark onFail)
                     throws java.io.IOException

genRealloc

private void genRealloc()
                 throws java.io.IOException

finish

public void finish()
Overrides:
finish in class RMachine

makeRegex

public Regex makeRegex()
Overrides:
makeRegex in class RMachine

getNVars

public int getNVars()
Overrides:
getNVars in class RMachine

tellName

public void tellName(java.lang.String name)
Description copied from class: RMachine
Provides string representation of this regular expression. It does not alter regex functionality. This string can be returned by resulting Regex toString() method, for example.
Overrides:
tellName in class RMachine

newVar

public RVariable newVar(java.lang.String name,
                        boolean begin)
Description copied from class: RMachine
Creates a new RMachine named variable. Such variable can be used to hold position in the string that regex is being matched against. Every variable name actually corresponds to a substring so two positions are needed: one for the beginning of substring and one for the end (points to the first character after substring). Parameter begin is used to tell which variable is needed.
Overrides:
newVar in class RMachine

newLabel

public RLabel newLabel()
Description copied from class: RMachine
Creates a new RMachine label. Label can be used to mark RMachine instruction and can be jumped to.
Overrides:
newLabel in class RMachine

newTmpVar

public RVariable newTmpVar(int init)
Description copied from class: RMachine
Creates a new RMachine temporary variable. Such variable can be used to hold loop counter or any other integer. Adds an assignment-reversion record to backtracing stack.
Overrides:
newTmpVar in class RMachine
Tags copied from class: RMachine
Parameters:
init - initial value for the variable

hardAssign

public void hardAssign(RVariable v,
                       int value)
Overrides:
hardAssign in class RMachine

mark

public void mark(RLabel label)
Description copied from class: RMachine
Makes the given label to refer to the next RMachine instruction. Once a label is marked, it cannot be marked again.
Overrides:
mark in class RMachine

pick

public void pick(RVariable v)
Description copied from class: RMachine
Store current character position (in the main buffer) into a given variable. Adds an assignment-reversion record to backtracing stack.
Overrides:
pick in class RMachine

fork

public void fork(RLabel forkLabel)
Description copied from class: RMachine
Add a fork record to backtracing stack. If subsequent fail transfers control to this record, instruction pointer will be set to the given label.
Overrides:
fork in class RMachine

skip

public void skip()
Description copied from class: RMachine
Increment current position by 1 (skip a character).
Overrides:
skip in class RMachine

boundary

public void boundary(int type)
Description copied from class: RMachine
Check if current position is on the certain type of boundary given by. boundaryClass. Boundary types:
  • '^' or 'A' - beginning of the string being matched.
  • '$' or 'Z' - end of the string being matched.
  • '<' - word beginning.
  • '>' - word end.
  • 'b' - word beginning or end.
  • 'B' - neither word beginning nor end.
Overrides:
boundary in class RMachine

assert

public void assert(int charClass,
                   char[] ranges)
Description copied from class: RMachine
Make sure that current character belongs to the given character class. If it does, increment current char position by 1, otherwise fail. See kmy.regex.tree.CharSet and kmy.regex.tree.CharClassCodes.
Overrides:
assert in class RMachine

assert

public void assert(char[] constStr)
Overrides:
assert in class RMachine

assert

public void assert(java.lang.String varName,
                   boolean picked)
Overrides:
assert in class RMachine

decjump

public void decjump(RVariable var,
                    RLabel label)
Overrides:
decjump in class RMachine

decfail

public void decfail(RVariable var)
Overrides:
decfail in class RMachine

forget

public void forget(RVariable var)
Overrides:
forget in class RMachine

jump

public void jump(RLabel label)
Overrides:
jump in class RMachine

fail

public void fail()
Overrides:
fail in class RMachine

hint

public void hint(int flags,
                 int minLength,
                 int maxLength)
Overrides:
hint in class RMachine

mfStart

public void mfStart(int headDecrement,
                    int minCount)
Overrides:
mfStart in class RMachine

mfEnd

public void mfEnd(int maxCount)
Description copied from class: RMachine
maxCount got minCount subtracted from it!
Overrides:
mfEnd in class RMachine

condJump

public void condJump(char[] ranges,
                     RLabel label)
Jump if char is NOT in range
Overrides:
condJump in class RMachine

condJump

public void condJump(int atLeast,
                     int atMost,
                     RLabel label)
Jump if less then atLeast or more then atMost chars left. If it is hard to determine how much left, it is OK not to jump.
Overrides:
condJump in class RMachine

condJump

public void condJump(char c,
                     RLabel label)
Jump if char is NOT one that is given.
Overrides:
condJump in class RMachine

shiftTable

public void shiftTable(boolean beginning,
                       int charsAhead,
                       char[] chars,
                       int[] shifts)
Overrides:
shiftTable in class RMachine