1// Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. 2// Use of this file is governed by the BSD 3-clause license that 3// can be found in the LICENSE.txt file in the project root. 4 5package antlr 6 7import "fmt" 8 9type TraceListener struct { 10 parser *BaseParser 11} 12 13func NewTraceListener(parser *BaseParser) *TraceListener { 14 tl := new(TraceListener) 15 tl.parser = parser 16 return tl 17} 18 19func (t *TraceListener) VisitErrorNode(_ ErrorNode) { 20} 21 22func (t *TraceListener) EnterEveryRule(ctx ParserRuleContext) { 23 fmt.Println("enter " + t.parser.GetRuleNames()[ctx.GetRuleIndex()] + ", LT(1)=" + t.parser.input.LT(1).GetText()) 24} 25 26func (t *TraceListener) VisitTerminal(node TerminalNode) { 27 fmt.Println("consume " + fmt.Sprint(node.GetSymbol()) + " rule " + t.parser.GetRuleNames()[t.parser.ctx.GetRuleIndex()]) 28} 29 30func (t *TraceListener) ExitEveryRule(ctx ParserRuleContext) { 31 fmt.Println("exit " + t.parser.GetRuleNames()[ctx.GetRuleIndex()] + ", LT(1)=" + t.parser.input.LT(1).GetText()) 32} 33