/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.grammar.debugger; import org.antlr.v4.runtime.ANTLRInputStream; /** * * @author Sam Harwell */ public class TracingCharStream extends ANTLRInputStream { private final LexerTraceListener _listener; private int inConsume; public TracingCharStream(LexerTraceListener listener, String input) { super(input); _listener = listener; } @Override public void seek(int index) { _listener.seek(index); super.seek(index); } @Override public void consume() { inConsume++; try { int symbol = LA(1); try { super.consume(); } finally { _listener.consume(symbol, index()); } } finally { inConsume--; } } @Override public int LA(int i) { if (inConsume == 0) { _listener.lookahead(i); } return super.LA(i); } }