public final class TypeTransformationParser
extends java.lang.Object
@template T := TTL-Exp =:
Modifier and Type | Class and Description |
---|---|
static class |
TypeTransformationParser.Keywords
Keywords of the type transformation language
|
static class |
TypeTransformationParser.OperationKind
The classification of the keywords
|
Modifier and Type | Field and Description |
---|---|
private ErrorReporter |
errorReporter |
private StaticSourceFile |
sourceFile |
private int |
templateCharno |
private int |
templateLineno |
private Node |
typeTransformationAst |
private java.lang.String |
typeTransformationString |
private static int |
VAR_ARGS |
Constructor and Description |
---|
TypeTransformationParser(java.lang.String typeTransformationString,
StaticSourceFile sourceFile,
ErrorReporter errorReporter,
int templateLineno,
int templateCharno) |
Modifier and Type | Method and Description |
---|---|
private void |
addNewWarning(java.lang.String messageId,
java.lang.String messageArg,
Node nodeWarning) |
private boolean |
checkParameterCount(Node expr,
TypeTransformationParser.Keywords keyword) |
private Node |
getCallArgument(Node n,
int i) |
private java.lang.String |
getCallName(Node n) |
private int |
getCallParamCount(Node n) |
private Node |
getFunctionBody(Node n) |
private int |
getFunctionParamCount(Node n) |
Node |
getTypeTransformationAst() |
private boolean |
isBooleanOperation(Node n) |
private boolean |
isOperation(Node n) |
private boolean |
isOperationKind(java.lang.String name,
TypeTransformationParser.OperationKind kind) |
private boolean |
isTypeName(Node n) |
private boolean |
isTypeVar(Node n) |
private boolean |
isValidExpression(Node e)
A valid expression is either:
- NAME for a type variable
- STRING for a type name
- CALL for the other expressions
|
private boolean |
isValidKeyword(java.lang.String name) |
private boolean |
isValidPredicate(java.lang.String name) |
private boolean |
isValidStringParam(Node expr) |
private boolean |
isValidStringPredicate(java.lang.String name) |
private boolean |
isValidTypePredicate(java.lang.String name) |
private boolean |
isValidTypevarPredicate(java.lang.String name) |
private TypeTransformationParser.Keywords |
nameToKeyword(java.lang.String s) |
boolean |
parseTypeTransformation()
Takes a type transformation expression, transforms it to an AST using
the ParserRunner of the JSCompiler and then verifies that it is a valid
AST.
|
private boolean |
validAllTypeExpression(Node expr)
An all type expression must be of the form: all()
|
private boolean |
validBooleanExpression(Node expr)
A boolean expression must be a boolean predicate or a boolean
type predicate
|
private boolean |
validBooleanOperation(Node expr) |
private boolean |
validConditionalExpression(Node expr)
A conditional type transformation expression must be of the
form cond(BoolExp, TTLExp, TTLExp)
|
private boolean |
validInstanceOfExpression(Node expr)
A typeOfVar expression must be of the form instanceOf('name')
|
private boolean |
validMaprecordExpression(Node expr)
A maprecord type transformation expression must be of the form
maprecord(TTLExp, (typevar, typevar) => TTLExp).
|
private boolean |
validMapunionExpression(Node expr)
A mapunion type transformation expression must be of the form
mapunion(TTLExp, (typevar) => TTLExp).
|
private boolean |
validNativeTypeExpr(Node expr) |
private boolean |
validNoneTypeExpression(Node expr)
A none type expression must be of the form: none()
|
private boolean |
validOperationExpression(Node expr)
An operation expression is a cond or a mapunion
|
private boolean |
validPrintTypeExpression(Node expr) |
private boolean |
validPropTypeExpression(Node expr) |
private boolean |
validRawTypeOfTypeExpression(Node expr)
A raw type expression must be of the form rawTypeOf(TTLExp)
|
private boolean |
validRecordParam(Node expr)
A record must be a valid type transformation expression or a node of the form:
{prop:TTLExp, prop:TTLExp, ...}
Notice that the values are mandatory and they must be valid type
transformation expressions
|
private boolean |
validRecordTypeExpression(Node expr)
A record type expression must be of the form:
record(RecordExp, RecordExp, ...)
|
private boolean |
validStringPredicate(Node expr,
int paramCount) |
private boolean |
validTemplateTypeExpression(Node expr)
A template type expression must be of the form type(typename, TTLExp,...)
or type(typevar, TTLExp...)
|
private boolean |
validTemplateTypeOfExpression(Node expr)
A template type of expression must be of the form
templateTypeOf(TTLExp, index)
|
private boolean |
validTypeExpression(Node expr)
A TTL type expression must be a union type, a template type, a record type
or any of the type predicates (none, rawTypeOf, templateTypeOf).
|
private boolean |
validTypeOfVarExpression(Node expr)
A typeOfVar expression must be of the form typeOfVar('name')
|
private boolean |
validTypePredicate(Node expr,
int paramCount) |
private boolean |
validTypeTransformationExpression(Node expr)
Checks the structure of the AST of a type transformation expression
in @template T := TTLExp =:
|
private boolean |
validTypevarParam(Node expr) |
private boolean |
validTypevarPredicate(Node expr,
int paramCount) |
private boolean |
validUnionTypeExpression(Node expr)
A Union type expression must be a valid type variable or
a union(TTLExp, TTLExp, ...)
|
private boolean |
validUnknownTypeExpression(Node expr)
An unknown type expression must be of the form: unknown()
|
private void |
warnExtraParam(java.lang.String msg,
Node e) |
private void |
warnInvalid(java.lang.String msg,
Node e) |
private void |
warnInvalidExpression(java.lang.String msg,
Node e) |
private void |
warnInvalidInside(java.lang.String msg,
Node e) |
private void |
warnMissingParam(java.lang.String msg,
Node e) |
private java.lang.String typeTransformationString
private Node typeTransformationAst
private StaticSourceFile sourceFile
private ErrorReporter errorReporter
private int templateLineno
private int templateCharno
private static final int VAR_ARGS
public TypeTransformationParser(java.lang.String typeTransformationString, StaticSourceFile sourceFile, ErrorReporter errorReporter, int templateLineno, int templateCharno)
public Node getTypeTransformationAst()
private void addNewWarning(java.lang.String messageId, java.lang.String messageArg, Node nodeWarning)
private TypeTransformationParser.Keywords nameToKeyword(java.lang.String s)
private boolean isValidKeyword(java.lang.String name)
private boolean isOperationKind(java.lang.String name, TypeTransformationParser.OperationKind kind)
private boolean isValidStringPredicate(java.lang.String name)
private boolean isValidTypePredicate(java.lang.String name)
private boolean isValidTypevarPredicate(java.lang.String name)
private boolean isBooleanOperation(Node n)
private boolean isValidPredicate(java.lang.String name)
private int getFunctionParamCount(Node n)
private java.lang.String getCallName(Node n)
private int getCallParamCount(Node n)
private boolean isTypeVar(Node n)
private boolean isTypeName(Node n)
private boolean isOperation(Node n)
private boolean isValidExpression(Node e)
private void warnInvalid(java.lang.String msg, Node e)
private void warnInvalidExpression(java.lang.String msg, Node e)
private void warnMissingParam(java.lang.String msg, Node e)
private void warnExtraParam(java.lang.String msg, Node e)
private void warnInvalidInside(java.lang.String msg, Node e)
private boolean checkParameterCount(Node expr, TypeTransformationParser.Keywords keyword)
public boolean parseTypeTransformation()
private boolean validTemplateTypeExpression(Node expr)
private boolean validUnionTypeExpression(Node expr)
private boolean validNoneTypeExpression(Node expr)
private boolean validAllTypeExpression(Node expr)
private boolean validUnknownTypeExpression(Node expr)
private boolean validRawTypeOfTypeExpression(Node expr)
private boolean validTemplateTypeOfExpression(Node expr)
private boolean validRecordParam(Node expr)
private boolean validRecordTypeExpression(Node expr)
private boolean validNativeTypeExpr(Node expr)
private boolean validTypeExpression(Node expr)
private boolean validTypePredicate(Node expr, int paramCount)
private boolean isValidStringParam(Node expr)
private boolean validStringPredicate(Node expr, int paramCount)
private boolean validTypevarParam(Node expr)
private boolean validTypevarPredicate(Node expr, int paramCount)
private boolean validBooleanOperation(Node expr)
private boolean validBooleanExpression(Node expr)
private boolean validConditionalExpression(Node expr)
private boolean validMapunionExpression(Node expr)
private boolean validMaprecordExpression(Node expr)
private boolean validTypeOfVarExpression(Node expr)
private boolean validInstanceOfExpression(Node expr)
private boolean validPrintTypeExpression(Node expr)
private boolean validPropTypeExpression(Node expr)
private boolean validOperationExpression(Node expr)
private boolean validTypeTransformationExpression(Node expr)