001: /*
002: [The "BSD licence"]
003: Copyright (c) 2005-2006 Terence Parr
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009: 1. Redistributions of source code must retain the above copyright
010: notice, this list of conditions and the following disclaimer.
011: 2. Redistributions in binary form must reproduce the above copyright
012: notice, this list of conditions and the following disclaimer in the
013: documentation and/or other materials provided with the distribution.
014: 3. The name of the author may not be used to endorse or promote products
015: derived from this software without specific prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
018: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
019: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
020: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
021: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
022: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
023: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
024: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
026: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028: package org.antlr.runtime.debug;
029:
030: import org.antlr.runtime.*;
031: import org.antlr.runtime.tree.TreeParser;
032: import org.antlr.runtime.tree.TreeNodeStream;
033: import org.antlr.runtime.tree.TreeAdaptor;
034:
035: import java.io.IOException;
036:
037: public class DebugTreeParser extends TreeParser {
038: /** Who to notify when events in the parser occur. */
039: protected DebugEventListener dbg = null;
040:
041: /** Used to differentiate between fixed lookahead and cyclic DFA decisions
042: * while profiling.
043: */
044: public boolean isCyclicDecision = false;
045:
046: /** Create a normal parser except wrap the token stream in a debug
047: * proxy that fires consume events.
048: */
049: public DebugTreeParser(TreeNodeStream input, DebugEventListener dbg) {
050: super (new DebugTreeNodeStream(input, dbg));
051: setDebugListener(dbg);
052: }
053:
054: public DebugTreeParser(TreeNodeStream input) {
055: this (input, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT);
056: }
057:
058: public DebugTreeParser(TreeNodeStream input, int port) {
059: super (new DebugTreeNodeStream(input, null));
060: }
061:
062: /** Provide a new debug event listener for this parser. Notify the
063: * input stream too that it should send events to this listener.
064: */
065: public void setDebugListener(DebugEventListener dbg) {
066: if (input instanceof DebugTreeNodeStream) {
067: ((DebugTreeNodeStream) input).setDebugListener(dbg);
068: }
069: this .dbg = dbg;
070: }
071:
072: public DebugEventListener getDebugListener() {
073: return dbg;
074: }
075:
076: public void reportError(IOException e) {
077: System.err.println(e);
078: e.printStackTrace(System.err);
079: }
080:
081: public void beginResync() {
082: dbg.beginResync();
083: }
084:
085: public void endResync() {
086: dbg.endResync();
087: }
088:
089: public void beginBacktrack(int level) {
090: dbg.beginBacktrack(level);
091: }
092:
093: public void endBacktrack(int level, boolean successful) {
094: dbg.endBacktrack(level, successful);
095: }
096:
097: public void recoverFromMismatchedToken(IntStream input,
098: RecognitionException mte, int ttype, BitSet follow)
099: throws RecognitionException {
100: dbg.recognitionException(mte);
101: super .recoverFromMismatchedToken(input, mte, ttype, follow);
102: }
103:
104: public void recoverFromMismatchedSet(IntStream input,
105: RecognitionException mte, org.antlr.runtime.BitSet follow)
106: throws RecognitionException {
107: dbg.recognitionException(mte);
108: super.recoverFromMismatchedSet(input, mte, follow);
109: }
110: }
|