1// [The "BSD licence"]
2// Copyright (c) 2006-2007 Kay Roepke
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9//    notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11//    notice, this list of conditions and the following disclaimer in the
12//    documentation and/or other materials provided with the distribution.
13// 3. The name of the author may not be used to endorse or promote products
14//    derived from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#import <Cocoa/Cocoa.h>
28#import "ANTLRParser.h"
29#import "ANTLRDebugEventListener.h"
30#import <sys/socket.h>
31#import <netinet/in.h>
32#import <netinet/tcp.h>
33#include <arpa/inet.h>
34
35// default port for ANTLRWorks
36#define DEFAULT_DEBUGGER_PORT 0xC001
37
38@interface ANTLRDebugEventProxy : NSObject <ANTLRDebugEventListener> {
39	int serverSocket;
40
41	struct sockaddr debugger_sockaddr;
42	socklen_t debugger_socklen;
43	int debuggerSocket;
44	NSFileHandle *debuggerFH;
45
46	NSString *grammarName;
47	int debuggerPort;
48}
49
50- (id) init;
51- (id) initWithGrammarName:(NSString *)aGrammarName debuggerPort:(NSInteger)aPort;
52- (void) waitForDebuggerConnection;
53- (void) waitForAck;
54- (void) sendToDebugger:(NSString *)message;
55- (void) sendToDebugger:(NSString *)message waitForResponse:(BOOL)wait;
56
57- (NSInteger) serverSocket;
58- (void) setServerSocket: (NSInteger) aServerSocket;
59
60- (NSInteger) debuggerSocket;
61- (void) setDebuggerSocket: (NSInteger) aDebuggerSocket;
62
63- (NSString *) grammarName;
64- (void) setGrammarName: (NSString *) aGrammarName;
65
66- (NSInteger) debuggerPort;
67- (void) setDebuggerPort: (NSInteger) aDebuggerPort;
68
69- (NSString *) escapeNewlines:(NSString *)aString;
70
71#pragma mark -
72
73#pragma mark DebugEventListener Protocol
74- (void) enterRule:(NSString *)ruleName;
75- (void) enterAlt:(NSInteger)alt;
76- (void) exitRule:(NSString *)ruleName;
77- (void) enterSubRule:(NSInteger)decisionNumber;
78- (void) exitSubRule:(NSInteger)decisionNumber;
79- (void) enterDecision:(NSInteger)decisionNumber;
80- (void) exitDecision:(NSInteger)decisionNumber;
81- (void) consumeToken:(id<ANTLRToken>)t;
82- (void) consumeHiddenToken:(id<ANTLRToken>)t;
83- (void) LT:(NSInteger)i foundToken:(id<ANTLRToken>)t;
84- (void) mark:(NSInteger)marker;
85- (void) rewind:(NSInteger)marker;
86- (void) rewind;
87- (void) beginBacktrack:(NSInteger)level;
88- (void) endBacktrack:(NSInteger)level wasSuccessful:(BOOL)successful;
89- (void) locationLine:(NSInteger)line column:(NSInteger)pos;
90- (void) recognitionException:(ANTLRRecognitionException *)e;
91- (void) beginResync;
92- (void) endResync;
93- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result;
94- (void) commence;
95- (void) terminate;
96
97
98#pragma mark Tree Parsing
99- (void) consumeNode:(unsigned)nodeHash ofType:(NSInteger)type text:(NSString *)text;
100- (void) LT:(NSInteger)i foundNode:(unsigned)nodeHash ofType:(NSInteger)type text:(NSString *)text;
101
102
103#pragma mark AST Events
104
105- (void) createNilNode:(unsigned)hash;
106- (void) createNode:(unsigned)hash text:(NSString *)text type:(NSInteger)type;
107- (void) createNode:(unsigned)hash fromTokenAtIndex:(NSInteger)tokenIndex;
108- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash;
109- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash;
110- (void) setTokenBoundariesForTree:(unsigned)nodeHash From:(NSInteger)tokenStartIndex To:(NSInteger)tokenStopIndex;
111
112@end
113