feat: update event mechanism

add event type local and global, clients have to use contractID and topic to subscribe local event; allow clients to subscribe topics (will not be recorded)
This commit is contained in:
Frank.R.Wu 2021-10-31 23:07:15 +08:00
parent 1ce2d05992
commit 9553f2a783
14 changed files with 12198 additions and 15492 deletions

View File

@ -1,10 +1,23 @@
package org.bdware.sc.conn;
import io.netty.channel.Channel;
import io.netty.util.Timeout;
public abstract class ResultCallback {
// private static final Logger LOGGER = LogManager.getLogger(ResultCallback.class);
Timeout task;
private Channel channel;
public ResultCallback() {
}
public ResultCallback(Channel channel) {
this.channel = channel;
}
public Channel getChannel() {
return channel;
}
public abstract void onResult(String str);

View File

@ -3,19 +3,18 @@ package org.bdware.sc.node;
import org.antlr.v4.runtime.CommonTokenStream;
import org.bdware.sc.event.REvent.REventSemantics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import java.util.*;
import static org.bdware.sc.event.REvent.REventSemantics.AT_LEAST_ONCE;
public class ContractNode {
private final List<ImportNode> imports;
private final List<ClassNode> clzs;
private final List<FunctionNode> functions;
private final Map<String, FunctionNode> functionMap;
private final Set<String> dependentContracts;
public Map<String, REventSemantics> events;
public Map<String, REventSemantics> logs;
public List<AnnotationNode> annotations;
public boolean sigRequired;
public String memorySet;
@ -25,7 +24,6 @@ public class ContractNode {
List<LogType> logTypes;
YjsType yjsType;
boolean instrumentBranch;
private final Set<String> dependentContracts;
public ContractNode(String name) {
contractName = name;
@ -35,6 +33,7 @@ public class ContractNode {
functionMap = new HashMap<>();
isBundle = false;
events = new HashMap<>();
logs = new HashMap<>();
annotations = new ArrayList<>();
permission = new ArrayList<>();
instrumentBranch = false;
@ -119,8 +118,11 @@ public class ContractNode {
functionMap.put(fn.functionName, fn);
}
clzs.addAll(contract.clzs);
contract.events.forEach((e, s) -> this.events.put(e, s));
if (null != contract.permission) permission.addAll(contract.permission);
this.events.putAll(contract.events);
this.logs.putAll(contract.logs);
if (null != contract.permission) {
permission.addAll(contract.permission);
}
if (null != contract.annotations) {
annotations.addAll(contract.annotations);
}
@ -144,15 +146,12 @@ public class ContractNode {
dependentContracts.add(contractName);
}
public void addEvent(String eventName) {
this.events.put(eventName, REventSemantics.AT_LEAST_ONCE);
}
public void addEvent(String eventName, String semantics) {
public void addEvent(String eventName, String semantics, boolean isGlobal) {
Map<String, REventSemantics> pointer = (isGlobal ? this.events : this.logs);
try {
this.events.put(eventName, REventSemantics.valueOf(semantics));
pointer.put(eventName, REventSemantics.valueOf(semantics));
} catch (IllegalArgumentException | NullPointerException e) {
this.events.put(eventName, REventSemantics.AT_LEAST_ONCE);
pointer.put(eventName, AT_LEAST_ONCE);
}
}
@ -190,11 +189,11 @@ public class ContractNode {
this.yjsType = yjsType1;
}
public void setInstrumentBranch(boolean b) {
instrumentBranch = b;
}
public boolean getInstrumentBranch() {
return instrumentBranch;
}
public void setInstrumentBranch(boolean b) {
instrumentBranch = b;
}
}

View File

@ -1,5 +1,7 @@
package org.bdware.sc.visitor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.sc.node.*;
import org.bdware.sc.parser.YJSParser;
import org.bdware.sc.parser.YJSParser.*;
@ -9,7 +11,7 @@ import java.util.ArrayList;
import java.util.List;
public class ContractReader extends YJSParserBaseVisitor<ContractNode> {
// private static final Logger LOGGER = LogManager.getLogger(ContractReader.class);
private static final Logger LOGGER = LogManager.getLogger(ContractReader.class);
String fileName;
public ContractReader(String fileName) {
@ -101,11 +103,12 @@ public class ContractReader extends YJSParserBaseVisitor<ContractNode> {
} else if (null != clzOrFunction.eventDeclaration()) {
EventDeclarationContext event = clzOrFunction.eventDeclaration();
EventSemanticsContext eventSemanticsContext = event.eventSemantics();
if (null == eventSemanticsContext) {
node.addEvent(event.Identifier().getText());
} else {
node.addEvent(event.Identifier().getText(), eventSemanticsContext.getText());
}
EventGlobalOrLocalContext eventGlobalOrLocalContext = event.eventGlobalOrLocal();
String semantics = (null == eventSemanticsContext ? null : eventSemanticsContext.getText());
boolean isGlobal =
(null != eventGlobalOrLocalContext &&
eventGlobalOrLocalContext.getText().equals("global"));
node.addEvent(event.Identifier().getText(), semantics, isGlobal);
}
}
// ctx.getSourceInterval()

View File

@ -218,10 +218,12 @@ public class Contract extends SM2Verifiable implements Serializable {
this.Mask.put(FunctionName, Mask);
}
public long getBuildTime() {
return buildTime;
}
public void setBuildTime(long buildTime) {
this.buildTime = buildTime;
}
public long getBuildTime() { return buildTime; }
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -89,33 +89,35 @@ AtToken=88
AtLeastOnce=89
AtMostOnce=90
OnlyOnce=91
Class=92
Enum=93
Extends=94
Super=95
Const=96
Export=97
Import=98
Contract=99
Module=100
Oracle=101
Implements=102
Let=103
Private=104
Public=105
Interface=106
Package=107
Protected=108
Static=109
Yield=110
Identifier=111
StringLiteral=112
TemplateStringLiteral=113
WhiteSpaces=114
LineTerminator=115
HtmlComment=116
CDataComment=117
UnexpectedCharacter=118
Global=92
Local=93
Class=94
Enum=95
Extends=96
Super=97
Const=98
Export=99
Import=100
Contract=101
Module=102
Oracle=103
Implements=104
Let=105
Private=106
Public=107
Interface=108
Package=109
Protected=110
Static=111
Yield=112
Identifier=113
StringLiteral=114
TemplateStringLiteral=115
WhiteSpaces=116
LineTerminator=117
HtmlComment=118
CDataComment=119
UnexpectedCharacter=120
'['=4
']'=5
'('=6
@ -198,22 +200,24 @@ UnexpectedCharacter=118
'AT_LEAST_ONCE'=89
'AT_MOST_ONCE'=90
'ONLY_ONCE'=91
'class'=92
'enum'=93
'extends'=94
'super'=95
'const'=96
'export'=97
'import'=98
'contract'=99
'module'=100
'oracle'=101
'implements'=102
'let'=103
'private'=104
'public'=105
'interface'=106
'package'=107
'protected'=108
'static'=109
'yield'=110
'global'=92
'local'=93
'class'=94
'enum'=95
'extends'=96
'super'=97
'const'=98
'export'=99
'import'=100
'contract'=101
'module'=102
'oracle'=103
'implements'=104
'let'=105
'private'=106
'public'=107
'interface'=108
'package'=109
'protected'=110
'static'=111
'yield'=112

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -89,33 +89,35 @@ AtToken=88
AtLeastOnce=89
AtMostOnce=90
OnlyOnce=91
Class=92
Enum=93
Extends=94
Super=95
Const=96
Export=97
Import=98
Contract=99
Module=100
Oracle=101
Implements=102
Let=103
Private=104
Public=105
Interface=106
Package=107
Protected=108
Static=109
Yield=110
Identifier=111
StringLiteral=112
TemplateStringLiteral=113
WhiteSpaces=114
LineTerminator=115
HtmlComment=116
CDataComment=117
UnexpectedCharacter=118
Global=92
Local=93
Class=94
Enum=95
Extends=96
Super=97
Const=98
Export=99
Import=100
Contract=101
Module=102
Oracle=103
Implements=104
Let=105
Private=106
Public=107
Interface=108
Package=109
Protected=110
Static=111
Yield=112
Identifier=113
StringLiteral=114
TemplateStringLiteral=115
WhiteSpaces=116
LineTerminator=117
HtmlComment=118
CDataComment=119
UnexpectedCharacter=120
'['=4
']'=5
'('=6
@ -198,22 +200,24 @@ UnexpectedCharacter=118
'AT_LEAST_ONCE'=89
'AT_MOST_ONCE'=90
'ONLY_ONCE'=91
'class'=92
'enum'=93
'extends'=94
'super'=95
'const'=96
'export'=97
'import'=98
'contract'=99
'module'=100
'oracle'=101
'implements'=102
'let'=103
'private'=104
'public'=105
'interface'=106
'package'=107
'protected'=108
'static'=109
'yield'=110
'global'=92
'local'=93
'class'=94
'enum'=95
'extends'=96
'super'=97
'const'=98
'export'=99
'import'=100
'contract'=101
'module'=102
'oracle'=103
'implements'=104
'let'=105
'private'=106
'public'=107
'interface'=108
'package'=109
'protected'=110
'static'=111
'yield'=112

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
package org.bdware.sc.parser;// Generated from /Users/frankrwu/Workspace/JetBrains/Idea/BDContract/genparser/input/YJSParser.g4 by ANTLR 4.9.1
package org.bdware.sc.parser;// Generated from /Users/frankrwu/Workspace/JetBrains/Idea/bdcontract-bundle/genparser/input/YJSParser.g4 by ANTLR 4.9.1
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
/**
@ -12,933 +11,718 @@ import org.antlr.v4.runtime.tree.ParseTreeVisitor;
public interface YJSParserVisitor<T> extends ParseTreeVisitor<T> {
/**
* Visit a parse tree produced by {@link YJSParser#program}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitProgram(YJSParser.ProgramContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#contractDeclar}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitContractDeclar(YJSParser.ContractDeclarContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#annotations}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotations(YJSParser.AnnotationsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#annotation}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotation(YJSParser.AnnotationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#annotationArgs}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationArgs(YJSParser.AnnotationArgsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#annotationLiteral}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationLiteral(YJSParser.AnnotationLiteralContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#clzOrFunctionDeclaration}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitClzOrFunctionDeclaration(YJSParser.ClzOrFunctionDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#eventSemantics}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitEventSemantics(YJSParser.EventSemanticsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#eventDeclaration}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitEventDeclaration(YJSParser.EventDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#eventGlobalOrLocal}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEventGlobalOrLocal(YJSParser.EventGlobalOrLocalContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#sourceElement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitSourceElement(YJSParser.SourceElementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#importStmts}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitImportStmts(YJSParser.ImportStmtsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#importStmt}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitImportStmt(YJSParser.ImportStmtContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#exportStmt}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitExportStmt(YJSParser.ExportStmtContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#versionName}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitVersionName(YJSParser.VersionNameContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#statement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitStatement(YJSParser.StatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#block}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlock(YJSParser.BlockContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#statementList}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitStatementList(YJSParser.StatementListContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#variableStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableStatement(YJSParser.VariableStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#variableDeclarationList}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableDeclarationList(YJSParser.VariableDeclarationListContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#variableDeclaration}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableDeclaration(YJSParser.VariableDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#emptyStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitEmptyStatement(YJSParser.EmptyStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#expressionStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitExpressionStatement(YJSParser.ExpressionStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#ifStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitIfStatement(YJSParser.IfStatementContext ctx);
/**
* Visit a parse tree produced by the {@code DoStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitDoStatement(YJSParser.DoStatementContext ctx);
/**
* Visit a parse tree produced by the {@code WhileStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitWhileStatement(YJSParser.WhileStatementContext ctx);
/**
* Visit a parse tree produced by the {@code ForStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitForStatement(YJSParser.ForStatementContext ctx);
/**
* Visit a parse tree produced by the {@code ForVarStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitForVarStatement(YJSParser.ForVarStatementContext ctx);
/**
* Visit a parse tree produced by the {@code ForInStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitForInStatement(YJSParser.ForInStatementContext ctx);
/**
* Visit a parse tree produced by the {@code ForVarInStatement}
* labeled alternative in {@link YJSParser#iterationStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitForVarInStatement(YJSParser.ForVarInStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#varModifier}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitVarModifier(YJSParser.VarModifierContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#continueStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitContinueStatement(YJSParser.ContinueStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#breakStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBreakStatement(YJSParser.BreakStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#returnStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitReturnStatement(YJSParser.ReturnStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#withStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitWithStatement(YJSParser.WithStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#switchStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitSwitchStatement(YJSParser.SwitchStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#caseBlock}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitCaseBlock(YJSParser.CaseBlockContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#caseClauses}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitCaseClauses(YJSParser.CaseClausesContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#caseClause}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitCaseClause(YJSParser.CaseClauseContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#defaultClause}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitDefaultClause(YJSParser.DefaultClauseContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#throwStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitThrowStatement(YJSParser.ThrowStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#tryStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitTryStatement(YJSParser.TryStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#catchProduction}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitCatchProduction(YJSParser.CatchProductionContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#finallyProduction}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitFinallyProduction(YJSParser.FinallyProductionContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#debuggerStatement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitDebuggerStatement(YJSParser.DebuggerStatementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#functionDeclaration}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitFunctionDeclaration(YJSParser.FunctionDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#classDeclaration}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassDeclaration(YJSParser.ClassDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#classTail}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassTail(YJSParser.ClassTailContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#classElement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassElement(YJSParser.ClassElementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#methodDefinition}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitMethodDefinition(YJSParser.MethodDefinitionContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#formalParameterList}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitFormalParameterList(YJSParser.FormalParameterListContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#formalParameterArg}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitFormalParameterArg(YJSParser.FormalParameterArgContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#lastFormalParameterArg}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLastFormalParameterArg(YJSParser.LastFormalParameterArgContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#functionBody}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitFunctionBody(YJSParser.FunctionBodyContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#sourceElements}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitSourceElements(YJSParser.SourceElementsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#arrayLiteral}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrayLiteral(YJSParser.ArrayLiteralContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#elementList}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitElementList(YJSParser.ElementListContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#lastElement}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLastElement(YJSParser.LastElementContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#objectLiteral}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitObjectLiteral(YJSParser.ObjectLiteralContext ctx);
/**
* Visit a parse tree produced by the {@code PropertyExpressionAssignment}
* labeled alternative in {@link YJSParser#propertyAssignment}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPropertyExpressionAssignment(YJSParser.PropertyExpressionAssignmentContext ctx);
/**
* Visit a parse tree produced by the {@code ComputedPropertyExpressionAssignment}
* labeled alternative in {@link YJSParser#propertyAssignment}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitComputedPropertyExpressionAssignment(YJSParser.ComputedPropertyExpressionAssignmentContext ctx);
/**
* Visit a parse tree produced by the {@code PropertyShorthand}
* labeled alternative in {@link YJSParser#propertyAssignment}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPropertyShorthand(YJSParser.PropertyShorthandContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#propertyName}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPropertyName(YJSParser.PropertyNameContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#arguments}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArguments(YJSParser.ArgumentsContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#lastArgument}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLastArgument(YJSParser.LastArgumentContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#expressionSequence}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitExpressionSequence(YJSParser.ExpressionSequenceContext ctx);
/**
* Visit a parse tree produced by the {@code TemplateStringExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitTemplateStringExpression(YJSParser.TemplateStringExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code TernaryExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitTernaryExpression(YJSParser.TernaryExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code LogicalAndExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLogicalAndExpression(YJSParser.LogicalAndExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code PreIncrementExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPreIncrementExpression(YJSParser.PreIncrementExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ObjectLiteralExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitObjectLiteralExpression(YJSParser.ObjectLiteralExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code InExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitInExpression(YJSParser.InExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code LogicalOrExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLogicalOrExpression(YJSParser.LogicalOrExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code NotExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitNotExpression(YJSParser.NotExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code PreDecreaseExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPreDecreaseExpression(YJSParser.PreDecreaseExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ArgumentsExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArgumentsExpression(YJSParser.ArgumentsExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ThisExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitThisExpression(YJSParser.ThisExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code UnaryMinusExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitUnaryMinusExpression(YJSParser.UnaryMinusExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code AssignmentExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAssignmentExpression(YJSParser.AssignmentExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code PostDecreaseExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPostDecreaseExpression(YJSParser.PostDecreaseExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code TypeofExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeofExpression(YJSParser.TypeofExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code InstanceofExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitInstanceofExpression(YJSParser.InstanceofExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code UnaryPlusExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitUnaryPlusExpression(YJSParser.UnaryPlusExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ArrowFunctionExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrowFunctionExpression(YJSParser.ArrowFunctionExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code EqualityExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitEqualityExpression(YJSParser.EqualityExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code BitXOrExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBitXOrExpression(YJSParser.BitXOrExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code SuperExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitSuperExpression(YJSParser.SuperExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code MultiplicativeExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitMultiplicativeExpression(YJSParser.MultiplicativeExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code BitShiftExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBitShiftExpression(YJSParser.BitShiftExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ParenthesizedExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitParenthesizedExpression(YJSParser.ParenthesizedExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code AdditiveExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAdditiveExpression(YJSParser.AdditiveExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code RelationalExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitRelationalExpression(YJSParser.RelationalExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code PostIncrementExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitPostIncrementExpression(YJSParser.PostIncrementExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code BitNotExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBitNotExpression(YJSParser.BitNotExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code NewExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitNewExpression(YJSParser.NewExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code LiteralExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLiteralExpression(YJSParser.LiteralExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ArrayLiteralExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrayLiteralExpression(YJSParser.ArrayLiteralExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code MemberDotExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitMemberDotExpression(YJSParser.MemberDotExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code MemberIndexExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitMemberIndexExpression(YJSParser.MemberIndexExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code IdentifierExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitIdentifierExpression(YJSParser.IdentifierExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code BitAndExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBitAndExpression(YJSParser.BitAndExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code BitOrExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitBitOrExpression(YJSParser.BitOrExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code AssignmentOperatorExpression}
* labeled alternative in {@link YJSParser#singleExpression}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAssignmentOperatorExpression(YJSParser.AssignmentOperatorExpressionContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#arrowFunctionParameters}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrowFunctionParameters(YJSParser.ArrowFunctionParametersContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#arrowFunctionBody}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrowFunctionBody(YJSParser.ArrowFunctionBodyContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#assignmentOperator}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitAssignmentOperator(YJSParser.AssignmentOperatorContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#literal}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitLiteral(YJSParser.LiteralContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#numericLiteral}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitNumericLiteral(YJSParser.NumericLiteralContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#identifierName}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitIdentifierName(YJSParser.IdentifierNameContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#reservedWord}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitReservedWord(YJSParser.ReservedWordContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#keyword}.
*
* @param ctx the parse tree
* @return the visitor result
*/
T visitKeyword(YJSParser.KeywordContext ctx);
/**
* Visit a parse tree produced by {@link YJSParser#eos}.
*
* @param ctx the parse tree
* @return the visitor result
*/