Class RegexLanguage
java.lang.Object
com.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
com.oracle.truffle.regex.RegexLanguage
public final class RegexLanguage
extends com.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
Truffle Regular Expression Language
This language represents classic regular expressions. It accepts regular expressions in the
following format: options/regex/flags, where options is a comma-separated list of
key-value pairs which affect how the regex is interpreted (see RegexOptions), and
/regex/flags is equivalent to the popular regular expression literal format found in e.g.
JavaScript or Ruby.
When parsing a regular expression, TRegex will return a CallTarget, which, when called,
will yield one of the following results:
- a
TruffleNullobject, indicating that TRegex cannot handle the given regex - a
RegexObject, which can be used to match the given regex - a
RegexSyntaxExceptionmay be thrown to indicate a syntax error. This exception is anAbstractTruffleExceptionwith exception typeExceptionType.PARSE_ERROR.
Object regex;
try {
regex = getContext().getEnv().parseInternal(Source.newBuilder("regex", "Flavor=ECMAScript/(a|(b))c/i", "myRegex").mimeType("application/tregex").internal(true).build()).call();
} catch (AbstractTruffleException e) {
if (InteropLibrary.getUncached().getExceptionType(e) == ExceptionType.PARSE_ERROR) {
// handle parser error
} else {
// fatal error, this should never happen
}
}
if (InteropLibrary.getUncached().isNull(regex)) {
// regex is not supported by TRegex, fall back to a different regex engine
}
Regex matcher usage example in pseudocode:
regex = <matcher from previous example>
assert(regex.pattern == "(a|(b))c")
assert(regex.flags.ignoreCase == true)
assert(regex.groupCount == 3)
result = regex.exec("xacy", 0)
assert(result.isMatch == true)
assertEquals([result.getStart(0), result.getEnd(0)], [ 1, 3])
assertEquals([result.getStart(1), result.getEnd(1)], [ 1, 2])
assertEquals([result.getStart(2), result.getEnd(2)], [-1, -1])
result2 = regex.exec("xxx", 0)
assert(result2.isMatch == false)
// result2.getStart(...) and result2.getEnd(...) are undefined
Debug loggers: Loggers.- See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class com.oracle.truffle.api.TruffleLanguage
com.oracle.truffle.api.TruffleLanguage.ContextLocalFactory<C,T>, com.oracle.truffle.api.TruffleLanguage.ContextLocalProvider<C>, com.oracle.truffle.api.TruffleLanguage.ContextPolicy, com.oracle.truffle.api.TruffleLanguage.ContextReference<C>, com.oracle.truffle.api.TruffleLanguage.ContextThreadLocalFactory<C, T>, com.oracle.truffle.api.TruffleLanguage.Env, com.oracle.truffle.api.TruffleLanguage.ExitMode, com.oracle.truffle.api.TruffleLanguage.InlineParsingRequest, com.oracle.truffle.api.TruffleLanguage.LanguageReference<L extends com.oracle.truffle.api.TruffleLanguage>, com.oracle.truffle.api.TruffleLanguage.ParsingRequest, com.oracle.truffle.api.TruffleLanguage.Provider, com.oracle.truffle.api.TruffleLanguage.Registration -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final Stringfinal RegexParserGlobalsFields inherited from class com.oracle.truffle.api.TruffleLanguage
locals -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected RegexLanguage.RegexContextcreateContext(com.oracle.truffle.api.TruffleLanguage.Env env) static RegexSourcecreateRegexSource(com.oracle.truffle.api.source.Source source) protected ObjectgetScope(RegexLanguage.RegexContext context) protected booleanisThreadAccessAllowed(Thread thread, boolean singleThreaded) RegexLanguageis thread-safe - it supports parallel parsing requests as well as parallel access to allAbstractRegexObjects.protected com.oracle.truffle.api.CallTargetparse(com.oracle.truffle.api.TruffleLanguage.ParsingRequest parsingRequest) protected booleanpatchContext(RegexLanguage.RegexContext context, com.oracle.truffle.api.TruffleLanguage.Env newEnv) Methods inherited from class com.oracle.truffle.api.TruffleLanguage
areOptionsCompatible, createContextLocal, createContextThreadLocal, disposeContext, disposeThread, exitContext, finalizeContext, finalizeThread, getAsynchronousStackDepth, getCurrentContext, getCurrentLanguage, getLanguageHome, getLanguageView, getOptionDescriptors, initializeContext, initializeMultipleContexts, initializeMultiThreading, initializeThread, isVisible, parse
-
Field Details
-
NAME
- See Also:
-
ID
- See Also:
-
MIME_TYPE
- See Also:
-
parserGlobals
-
-
Constructor Details
-
RegexLanguage
public RegexLanguage()
-
-
Method Details
-
getCachedGroupBoundaries
-
parse
protected com.oracle.truffle.api.CallTarget parse(com.oracle.truffle.api.TruffleLanguage.ParsingRequest parsingRequest) - Overrides:
parsein classcom.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
-
createRegexSource
-
createContext
- Specified by:
createContextin classcom.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
-
patchContext
protected boolean patchContext(RegexLanguage.RegexContext context, com.oracle.truffle.api.TruffleLanguage.Env newEnv) - Overrides:
patchContextin classcom.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
-
getScope
- Overrides:
getScopein classcom.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>
-
isThreadAccessAllowed
RegexLanguageis thread-safe - it supports parallel parsing requests as well as parallel access to allAbstractRegexObjects. Parallel access toRegexResults objects may lead to duplicate execution of code, but no wrong results.- Overrides:
isThreadAccessAllowedin classcom.oracle.truffle.api.TruffleLanguage<RegexLanguage.RegexContext>- Parameters:
thread- the thread that accesses the context for the first time.singleThreaded-trueif the access is considered single-threaded,falseif more than one thread is active at the same time.- Returns:
- always
true
-