parser

package
v0.0.0-...-3c27f14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 25, 2022 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

View Source
const (
	QueryLexerSPACE     = 1
	QueryLexerLPAREN    = 2
	QueryLexerRPAREN    = 3
	QueryLexerAND       = 4
	QueryLexerOR        = 5
	QueryLexerNOT       = 6
	QueryLexerNULLVALUE = 7
	QueryLexerCOLON     = 8
	QueryLexerCHINESE   = 9
	QueryLexerUNDERLINE = 10
	QueryLexerSTAR      = 11
	QueryLexerMINUS     = 12
	QueryLexerDOT       = 13
	QueryLexerVALUE     = 14
)

QueryLexer tokens.

View Source
const (
	QueryParserEOF       = antlr.TokenEOF
	QueryParserSPACE     = 1
	QueryParserLPAREN    = 2
	QueryParserRPAREN    = 3
	QueryParserAND       = 4
	QueryParserOR        = 5
	QueryParserNOT       = 6
	QueryParserNULLVALUE = 7
	QueryParserCOLON     = 8
	QueryParserCHINESE   = 9
	QueryParserUNDERLINE = 10
	QueryParserSTAR      = 11
	QueryParserMINUS     = 12
	QueryParserDOT       = 13
	QueryParserVALUE     = 14
)

QueryParser tokens.

View Source
const (
	QueryParserRULE_run        = 0
	QueryParserRULE_expression = 1
	QueryParserRULE_notClause  = 2
)

QueryParser rules.

Variables

This section is empty.

Functions

func QueryLexerInit

func QueryLexerInit()

QueryLexerInit initializes any static state used to implement QueryLexer. By default the static state used to implement the lexer is lazily initialized during the first call to NewQueryLexer(). You can call this function if you wish to initialize the static state ahead of time.

func QueryParserInit

func QueryParserInit()

QueryParserInit initializes any static state used to implement QueryParser. By default the static state used to implement the parser is lazily initialized during the first call to NewQueryParser(). You can call this function if you wish to initialize the static state ahead of time.

Types

type BaseQueryParserListener

type BaseQueryParserListener struct{}

BaseQueryParserListener is a complete listener for a parse tree produced by QueryParser.

func (*BaseQueryParserListener) EnterEqual

func (s *BaseQueryParserListener) EnterEqual(ctx *EqualContext)

EnterEqual is called when production equal is entered.

func (*BaseQueryParserListener) EnterEveryRule

func (s *BaseQueryParserListener) EnterEveryRule(ctx antlr.ParserRuleContext)

EnterEveryRule is called when any rule is entered.

func (*BaseQueryParserListener) EnterLogicAnd

func (s *BaseQueryParserListener) EnterLogicAnd(ctx *LogicAndContext)

EnterLogicAnd is called when production logicAnd is entered.

func (*BaseQueryParserListener) EnterLogicNot

func (s *BaseQueryParserListener) EnterLogicNot(ctx *LogicNotContext)

EnterLogicNot is called when production logicNot is entered.

func (*BaseQueryParserListener) EnterLogicOR

func (s *BaseQueryParserListener) EnterLogicOR(ctx *LogicORContext)

EnterLogicOR is called when production logicOR is entered.

func (*BaseQueryParserListener) EnterNotClause

func (s *BaseQueryParserListener) EnterNotClause(ctx *NotClauseContext)

EnterNotClause is called when production notClause is entered.

func (*BaseQueryParserListener) EnterNullValue

func (s *BaseQueryParserListener) EnterNullValue(ctx *NullValueContext)

EnterNullValue is called when production nullValue is entered.

func (*BaseQueryParserListener) EnterParenExpr

func (s *BaseQueryParserListener) EnterParenExpr(ctx *ParenExprContext)

EnterParenExpr is called when production parenExpr is entered.

func (*BaseQueryParserListener) EnterRun

func (s *BaseQueryParserListener) EnterRun(ctx *RunContext)

EnterRun is called when production run is entered.

func (*BaseQueryParserListener) EnterValue

func (s *BaseQueryParserListener) EnterValue(ctx *ValueContext)

EnterValue is called when production value is entered.

func (*BaseQueryParserListener) ExitEqual

func (s *BaseQueryParserListener) ExitEqual(ctx *EqualContext)

ExitEqual is called when production equal is exited.

func (*BaseQueryParserListener) ExitEveryRule

func (s *BaseQueryParserListener) ExitEveryRule(ctx antlr.ParserRuleContext)

ExitEveryRule is called when any rule is exited.

func (*BaseQueryParserListener) ExitLogicAnd

func (s *BaseQueryParserListener) ExitLogicAnd(ctx *LogicAndContext)

ExitLogicAnd is called when production logicAnd is exited.

func (*BaseQueryParserListener) ExitLogicNot

func (s *BaseQueryParserListener) ExitLogicNot(ctx *LogicNotContext)

ExitLogicNot is called when production logicNot is exited.

func (*BaseQueryParserListener) ExitLogicOR

func (s *BaseQueryParserListener) ExitLogicOR(ctx *LogicORContext)

ExitLogicOR is called when production logicOR is exited.

func (*BaseQueryParserListener) ExitNotClause

func (s *BaseQueryParserListener) ExitNotClause(ctx *NotClauseContext)

ExitNotClause is called when production notClause is exited.

func (*BaseQueryParserListener) ExitNullValue

func (s *BaseQueryParserListener) ExitNullValue(ctx *NullValueContext)

ExitNullValue is called when production nullValue is exited.

func (*BaseQueryParserListener) ExitParenExpr

func (s *BaseQueryParserListener) ExitParenExpr(ctx *ParenExprContext)

ExitParenExpr is called when production parenExpr is exited.

func (*BaseQueryParserListener) ExitRun

func (s *BaseQueryParserListener) ExitRun(ctx *RunContext)

ExitRun is called when production run is exited.

func (*BaseQueryParserListener) ExitValue

func (s *BaseQueryParserListener) ExitValue(ctx *ValueContext)

ExitValue is called when production value is exited.

func (*BaseQueryParserListener) VisitErrorNode

func (s *BaseQueryParserListener) VisitErrorNode(node antlr.ErrorNode)

VisitErrorNode is called when an error node is visited.

func (*BaseQueryParserListener) VisitTerminal

func (s *BaseQueryParserListener) VisitTerminal(node antlr.TerminalNode)

VisitTerminal is called when a terminal node is visited.

type BaseQueryParserVisitor

type BaseQueryParserVisitor struct {
	*antlr.BaseParseTreeVisitor
}

func (*BaseQueryParserVisitor) VisitEqual

func (v *BaseQueryParserVisitor) VisitEqual(ctx *EqualContext) interface{}

func (*BaseQueryParserVisitor) VisitLogicAnd

func (v *BaseQueryParserVisitor) VisitLogicAnd(ctx *LogicAndContext) interface{}

func (*BaseQueryParserVisitor) VisitLogicNot

func (v *BaseQueryParserVisitor) VisitLogicNot(ctx *LogicNotContext) interface{}

func (*BaseQueryParserVisitor) VisitLogicOR

func (v *BaseQueryParserVisitor) VisitLogicOR(ctx *LogicORContext) interface{}

func (*BaseQueryParserVisitor) VisitNotClause

func (v *BaseQueryParserVisitor) VisitNotClause(ctx *NotClauseContext) interface{}

func (*BaseQueryParserVisitor) VisitNullValue

func (v *BaseQueryParserVisitor) VisitNullValue(ctx *NullValueContext) interface{}

func (*BaseQueryParserVisitor) VisitParenExpr

func (v *BaseQueryParserVisitor) VisitParenExpr(ctx *ParenExprContext) interface{}

func (*BaseQueryParserVisitor) VisitRun

func (v *BaseQueryParserVisitor) VisitRun(ctx *RunContext) interface{}

func (*BaseQueryParserVisitor) VisitValue

func (v *BaseQueryParserVisitor) VisitValue(ctx *ValueContext) interface{}

type EqualContext

type EqualContext struct {
	*ExpressionContext
	// contains filtered or unexported fields
}

func NewEqualContext

func NewEqualContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *EqualContext

func (*EqualContext) Accept

func (s *EqualContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*EqualContext) AllExpression

func (s *EqualContext) AllExpression() []IExpressionContext

func (*EqualContext) COLON

func (s *EqualContext) COLON() antlr.TerminalNode

func (*EqualContext) EnterRule

func (s *EqualContext) EnterRule(listener antlr.ParseTreeListener)

func (*EqualContext) ExitRule

func (s *EqualContext) ExitRule(listener antlr.ParseTreeListener)

func (*EqualContext) Expression

func (s *EqualContext) Expression(i int) IExpressionContext

func (*EqualContext) GetLeftExpr

func (s *EqualContext) GetLeftExpr() IExpressionContext

func (*EqualContext) GetOperator

func (s *EqualContext) GetOperator() antlr.Token

func (*EqualContext) GetRightExpr

func (s *EqualContext) GetRightExpr() IExpressionContext

func (*EqualContext) GetRuleContext

func (s *EqualContext) GetRuleContext() antlr.RuleContext

func (*EqualContext) SetLeftExpr

func (s *EqualContext) SetLeftExpr(v IExpressionContext)

func (*EqualContext) SetOperator

func (s *EqualContext) SetOperator(v antlr.Token)

func (*EqualContext) SetRightExpr

func (s *EqualContext) SetRightExpr(v IExpressionContext)

type ExpressionContext

type ExpressionContext struct {
	*antlr.BaseParserRuleContext
	// contains filtered or unexported fields
}

func NewEmptyExpressionContext

func NewEmptyExpressionContext() *ExpressionContext

func NewExpressionContext

func NewExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionContext

func (*ExpressionContext) CopyFrom

func (s *ExpressionContext) CopyFrom(ctx *ExpressionContext)

func (*ExpressionContext) GetParser

func (s *ExpressionContext) GetParser() antlr.Parser

func (*ExpressionContext) GetRuleContext

func (s *ExpressionContext) GetRuleContext() antlr.RuleContext

func (*ExpressionContext) IsExpressionContext

func (*ExpressionContext) IsExpressionContext()

func (*ExpressionContext) ToStringTree

func (s *ExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string

type IExpressionContext

type IExpressionContext interface {
	antlr.ParserRuleContext

	// GetParser returns the parser.
	GetParser() antlr.Parser

	// IsExpressionContext differentiates from other interfaces.
	IsExpressionContext()
}

IExpressionContext is an interface to support dynamic dispatch.

type INotClauseContext

type INotClauseContext interface {
	antlr.ParserRuleContext

	// GetParser returns the parser.
	GetParser() antlr.Parser

	// IsNotClauseContext differentiates from other interfaces.
	IsNotClauseContext()
}

INotClauseContext is an interface to support dynamic dispatch.

type IRunContext

type IRunContext interface {
	antlr.ParserRuleContext

	// GetParser returns the parser.
	GetParser() antlr.Parser

	// IsRunContext differentiates from other interfaces.
	IsRunContext()
}

IRunContext is an interface to support dynamic dispatch.

type LogicAndContext

type LogicAndContext struct {
	*ExpressionContext
	// contains filtered or unexported fields
}

func NewLogicAndContext

func NewLogicAndContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *LogicAndContext

func (*LogicAndContext) AND

func (*LogicAndContext) Accept

func (s *LogicAndContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*LogicAndContext) AllExpression

func (s *LogicAndContext) AllExpression() []IExpressionContext

func (*LogicAndContext) EnterRule

func (s *LogicAndContext) EnterRule(listener antlr.ParseTreeListener)

func (*LogicAndContext) ExitRule

func (s *LogicAndContext) ExitRule(listener antlr.ParseTreeListener)

func (*LogicAndContext) Expression

func (s *LogicAndContext) Expression(i int) IExpressionContext

func (*LogicAndContext) GetLeftExpr

func (s *LogicAndContext) GetLeftExpr() IExpressionContext

func (*LogicAndContext) GetOperator

func (s *LogicAndContext) GetOperator() antlr.Token

func (*LogicAndContext) GetRightExpr

func (s *LogicAndContext) GetRightExpr() IExpressionContext

func (*LogicAndContext) GetRuleContext

func (s *LogicAndContext) GetRuleContext() antlr.RuleContext

func (*LogicAndContext) SetLeftExpr

func (s *LogicAndContext) SetLeftExpr(v IExpressionContext)

func (*LogicAndContext) SetOperator

func (s *LogicAndContext) SetOperator(v antlr.Token)

func (*LogicAndContext) SetRightExpr

func (s *LogicAndContext) SetRightExpr(v IExpressionContext)

type LogicNotContext

type LogicNotContext struct {
	*ExpressionContext
}

func NewLogicNotContext

func NewLogicNotContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *LogicNotContext

func (*LogicNotContext) Accept

func (s *LogicNotContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*LogicNotContext) EnterRule

func (s *LogicNotContext) EnterRule(listener antlr.ParseTreeListener)

func (*LogicNotContext) ExitRule

func (s *LogicNotContext) ExitRule(listener antlr.ParseTreeListener)

func (*LogicNotContext) GetRuleContext

func (s *LogicNotContext) GetRuleContext() antlr.RuleContext

func (*LogicNotContext) NotClause

func (s *LogicNotContext) NotClause() INotClauseContext

type LogicORContext

type LogicORContext struct {
	*ExpressionContext
	// contains filtered or unexported fields
}

func NewLogicORContext

func NewLogicORContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *LogicORContext

func (*LogicORContext) Accept

func (s *LogicORContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*LogicORContext) AllExpression

func (s *LogicORContext) AllExpression() []IExpressionContext

func (*LogicORContext) EnterRule

func (s *LogicORContext) EnterRule(listener antlr.ParseTreeListener)

func (*LogicORContext) ExitRule

func (s *LogicORContext) ExitRule(listener antlr.ParseTreeListener)

func (*LogicORContext) Expression

func (s *LogicORContext) Expression(i int) IExpressionContext

func (*LogicORContext) GetLeftExpr

func (s *LogicORContext) GetLeftExpr() IExpressionContext

func (*LogicORContext) GetOperator

func (s *LogicORContext) GetOperator() antlr.Token

func (*LogicORContext) GetRightExpr

func (s *LogicORContext) GetRightExpr() IExpressionContext

func (*LogicORContext) GetRuleContext

func (s *LogicORContext) GetRuleContext() antlr.RuleContext

func (*LogicORContext) OR

func (*LogicORContext) SetLeftExpr

func (s *LogicORContext) SetLeftExpr(v IExpressionContext)

func (*LogicORContext) SetOperator

func (s *LogicORContext) SetOperator(v antlr.Token)

func (*LogicORContext) SetRightExpr

func (s *LogicORContext) SetRightExpr(v IExpressionContext)

type NotClauseContext

type NotClauseContext struct {
	*antlr.BaseParserRuleContext
	// contains filtered or unexported fields
}

func NewEmptyNotClauseContext

func NewEmptyNotClauseContext() *NotClauseContext

func NewNotClauseContext

func NewNotClauseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *NotClauseContext

func (*NotClauseContext) Accept

func (s *NotClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*NotClauseContext) EnterRule

func (s *NotClauseContext) EnterRule(listener antlr.ParseTreeListener)

func (*NotClauseContext) ExitRule

func (s *NotClauseContext) ExitRule(listener antlr.ParseTreeListener)

func (*NotClauseContext) Expression

func (s *NotClauseContext) Expression() IExpressionContext

func (*NotClauseContext) GetParser

func (s *NotClauseContext) GetParser() antlr.Parser

func (*NotClauseContext) GetRuleContext

func (s *NotClauseContext) GetRuleContext() antlr.RuleContext

func (*NotClauseContext) IsNotClauseContext

func (*NotClauseContext) IsNotClauseContext()

func (*NotClauseContext) NOT

func (*NotClauseContext) ToStringTree

func (s *NotClauseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string

type NullValueContext

type NullValueContext struct {
	*ExpressionContext
}

func NewNullValueContext

func NewNullValueContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *NullValueContext

func (*NullValueContext) Accept

func (s *NullValueContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*NullValueContext) EnterRule

func (s *NullValueContext) EnterRule(listener antlr.ParseTreeListener)

func (*NullValueContext) ExitRule

func (s *NullValueContext) ExitRule(listener antlr.ParseTreeListener)

func (*NullValueContext) GetRuleContext

func (s *NullValueContext) GetRuleContext() antlr.RuleContext

func (*NullValueContext) NULLVALUE

func (s *NullValueContext) NULLVALUE() antlr.TerminalNode

type ParenExprContext

type ParenExprContext struct {
	*ExpressionContext
}

func NewParenExprContext

func NewParenExprContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ParenExprContext

func (*ParenExprContext) Accept

func (s *ParenExprContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*ParenExprContext) EnterRule

func (s *ParenExprContext) EnterRule(listener antlr.ParseTreeListener)

func (*ParenExprContext) ExitRule

func (s *ParenExprContext) ExitRule(listener antlr.ParseTreeListener)

func (*ParenExprContext) Expression

func (s *ParenExprContext) Expression() IExpressionContext

func (*ParenExprContext) GetRuleContext

func (s *ParenExprContext) GetRuleContext() antlr.RuleContext

func (*ParenExprContext) LPAREN

func (s *ParenExprContext) LPAREN() antlr.TerminalNode

func (*ParenExprContext) RPAREN

func (s *ParenExprContext) RPAREN() antlr.TerminalNode

type QueryLexer

type QueryLexer struct {
	*antlr.BaseLexer
	// contains filtered or unexported fields
}

func NewQueryLexer

func NewQueryLexer(input antlr.CharStream) *QueryLexer

NewQueryLexer produces a new lexer instance for the optional input antlr.CharStream.

type QueryParser

type QueryParser struct {
	*antlr.BaseParser
}

func NewQueryParser

func NewQueryParser(input antlr.TokenStream) *QueryParser

NewQueryParser produces a new parser instance for the optional input antlr.TokenStream.

func (*QueryParser) Expression

func (p *QueryParser) Expression() (localctx IExpressionContext)

func (*QueryParser) Expression_Sempred

func (p *QueryParser) Expression_Sempred(localctx antlr.RuleContext, predIndex int) bool

func (*QueryParser) NotClause

func (p *QueryParser) NotClause() (localctx INotClauseContext)

func (*QueryParser) Run

func (p *QueryParser) Run() (localctx IRunContext)

func (*QueryParser) Sempred

func (p *QueryParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool

type QueryParserListener

type QueryParserListener interface {
	antlr.ParseTreeListener

	// EnterRun is called when entering the run production.
	EnterRun(c *RunContext)

	// EnterEqual is called when entering the equal production.
	EnterEqual(c *EqualContext)

	// EnterLogicAnd is called when entering the logicAnd production.
	EnterLogicAnd(c *LogicAndContext)

	// EnterLogicOR is called when entering the logicOR production.
	EnterLogicOR(c *LogicORContext)

	// EnterNullValue is called when entering the nullValue production.
	EnterNullValue(c *NullValueContext)

	// EnterValue is called when entering the value production.
	EnterValue(c *ValueContext)

	// EnterParenExpr is called when entering the parenExpr production.
	EnterParenExpr(c *ParenExprContext)

	// EnterLogicNot is called when entering the logicNot production.
	EnterLogicNot(c *LogicNotContext)

	// EnterNotClause is called when entering the notClause production.
	EnterNotClause(c *NotClauseContext)

	// ExitRun is called when exiting the run production.
	ExitRun(c *RunContext)

	// ExitEqual is called when exiting the equal production.
	ExitEqual(c *EqualContext)

	// ExitLogicAnd is called when exiting the logicAnd production.
	ExitLogicAnd(c *LogicAndContext)

	// ExitLogicOR is called when exiting the logicOR production.
	ExitLogicOR(c *LogicORContext)

	// ExitNullValue is called when exiting the nullValue production.
	ExitNullValue(c *NullValueContext)

	// ExitValue is called when exiting the value production.
	ExitValue(c *ValueContext)

	// ExitParenExpr is called when exiting the parenExpr production.
	ExitParenExpr(c *ParenExprContext)

	// ExitLogicNot is called when exiting the logicNot production.
	ExitLogicNot(c *LogicNotContext)

	// ExitNotClause is called when exiting the notClause production.
	ExitNotClause(c *NotClauseContext)
}

QueryParserListener is a complete listener for a parse tree produced by QueryParser.

type QueryParserVisitor

type QueryParserVisitor interface {
	antlr.ParseTreeVisitor

	// Visit a parse tree produced by QueryParser#run.
	VisitRun(ctx *RunContext) interface{}

	// Visit a parse tree produced by QueryParser#equal.
	VisitEqual(ctx *EqualContext) interface{}

	// Visit a parse tree produced by QueryParser#logicAnd.
	VisitLogicAnd(ctx *LogicAndContext) interface{}

	// Visit a parse tree produced by QueryParser#logicOR.
	VisitLogicOR(ctx *LogicORContext) interface{}

	// Visit a parse tree produced by QueryParser#nullValue.
	VisitNullValue(ctx *NullValueContext) interface{}

	// Visit a parse tree produced by QueryParser#value.
	VisitValue(ctx *ValueContext) interface{}

	// Visit a parse tree produced by QueryParser#parenExpr.
	VisitParenExpr(ctx *ParenExprContext) interface{}

	// Visit a parse tree produced by QueryParser#logicNot.
	VisitLogicNot(ctx *LogicNotContext) interface{}

	// Visit a parse tree produced by QueryParser#notClause.
	VisitNotClause(ctx *NotClauseContext) interface{}
}

A complete Visitor for a parse tree produced by QueryParser.

type RunContext

type RunContext struct {
	*antlr.BaseParserRuleContext
	// contains filtered or unexported fields
}

func NewEmptyRunContext

func NewEmptyRunContext() *RunContext

func NewRunContext

func NewRunContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *RunContext

func (*RunContext) Accept

func (s *RunContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*RunContext) EOF

func (s *RunContext) EOF() antlr.TerminalNode

func (*RunContext) EnterRule

func (s *RunContext) EnterRule(listener antlr.ParseTreeListener)

func (*RunContext) ExitRule

func (s *RunContext) ExitRule(listener antlr.ParseTreeListener)

func (*RunContext) Expression

func (s *RunContext) Expression() IExpressionContext

func (*RunContext) GetParser

func (s *RunContext) GetParser() antlr.Parser

func (*RunContext) GetRuleContext

func (s *RunContext) GetRuleContext() antlr.RuleContext

func (*RunContext) IsRunContext

func (*RunContext) IsRunContext()

func (*RunContext) ToStringTree

func (s *RunContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string

type ValueContext

type ValueContext struct {
	*ExpressionContext
}

func NewValueContext

func NewValueContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ValueContext

func (*ValueContext) Accept

func (s *ValueContext) Accept(visitor antlr.ParseTreeVisitor) interface{}

func (*ValueContext) EnterRule

func (s *ValueContext) EnterRule(listener antlr.ParseTreeListener)

func (*ValueContext) ExitRule

func (s *ValueContext) ExitRule(listener antlr.ParseTreeListener)

func (*ValueContext) GetRuleContext

func (s *ValueContext) GetRuleContext() antlr.RuleContext

func (*ValueContext) VALUE

func (s *ValueContext) VALUE() antlr.TerminalNode

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL