summaryrefslogtreecommitdiff
path: root/impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-07-10 13:01:48 +1000
committerCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-07-10 13:01:48 +1000
commitf9fc35785b53aa097a09ab1b865d33497ee1802e (patch)
treea6c8ea8e913ceab2c08e9f7698332bff08681552 /impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c
parentd11acd6d52351b35c102e9c18e32d38a11975c5b (diff)
Move antlr. Add `make test` to Makefile.
Diffstat (limited to 'impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c')
-rw-r--r--impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c1047
1 files changed, 0 insertions, 1047 deletions
diff --git a/impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c b/impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c
deleted file mode 100644
index d5f177a..0000000
--- a/impl/antlr/libantlr3c-3.4/src/antlr3debughandlers.c
+++ /dev/null
@@ -1,1047 +0,0 @@
-/// \file
-/// Provides the debugging functions invoked by a recognizer
-/// built using the debug generator mode of the antlr tool.
-/// See antlr3debugeventlistener.h for documentation.
-///
-
-// [The "BSD licence"]
-// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
-// http://www.temporal-wave.com
-// http://www.linkedin.com/in/jimidle
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// 1. Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// 3. The name of the author may not be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include <antlr3.h>
-
-// Not everyone wishes to include the debugger stuff in their final deployment because
-// it will then rely on being linked with the socket libraries. Hence if the programmer turns
-// off the debugging, we do some dummy stuff that satifies compilers etc but means there is
-// no debugger and no reliance on the socket librarires. If you set this flag, then using the -debug
-// option to generate your code will produce code that just crashes, but then I presme you are smart
-// enough to realize that building the libraries without debugger support means you can't call the
-// debugger ;-)
-//
-#ifdef ANTLR3_NODEBUGGER
-ANTLR3_API pANTLR3_DEBUG_EVENT_LISTENER
-antlr3DebugListenerNew()
-{
- ANTLR3_PRINTF("C runtime was compiled without debugger support. This program will crash!!");
- return NULL;
-}
-#else
-
-static ANTLR3_BOOLEAN handshake (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void enterRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName);
-static void enterAlt (pANTLR3_DEBUG_EVENT_LISTENER delboy, int alt);
-static void exitRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName);
-static void enterSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber);
-static void exitSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber);
-static void enterDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber);
-static void exitDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber);
-static void consumeToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t);
-static void consumeHiddenToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t);
-static void LT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_COMMON_TOKEN t);
-static void mark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker);
-static void rewindMark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker);
-static void rewindLast (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void beginBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level);
-static void endBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level, ANTLR3_BOOLEAN successful);
-static void location (pANTLR3_DEBUG_EVENT_LISTENER delboy, int line, int pos);
-static void recognitionException (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_EXCEPTION e);
-static void beginResync (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void endResync (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void semanticPredicate (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_BOOLEAN result, const char * predicate);
-static void commence (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void terminate (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-static void consumeNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t);
-static void LTT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_BASE_TREE t);
-static void nilNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t);
-static void errorNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t);
-static void createNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t);
-static void createNodeTok (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node, pANTLR3_COMMON_TOKEN token);
-static void becomeRoot (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot);
-static void addChild (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE root, pANTLR3_BASE_TREE child);
-static void setTokenBoundaries (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t, ANTLR3_MARKER tokenStartIndex, ANTLR3_MARKER tokenStopIndex);
-static void ack (pANTLR3_DEBUG_EVENT_LISTENER delboy);
-
-/// Create and initialize a new debug event listener that can be connected to
-/// by ANTLRWorks and any other debugger via a socket.
-///
-ANTLR3_API pANTLR3_DEBUG_EVENT_LISTENER
-antlr3DebugListenerNew()
-{
- pANTLR3_DEBUG_EVENT_LISTENER delboy;
-
- delboy = ANTLR3_CALLOC(1, sizeof(ANTLR3_DEBUG_EVENT_LISTENER));
-
- if (delboy == NULL)
- {
- return NULL;
- }
-
- // Initialize the API
- //
- delboy->addChild = addChild;
- delboy->becomeRoot = becomeRoot;
- delboy->beginBacktrack = beginBacktrack;
- delboy->beginResync = beginResync;
- delboy->commence = commence;
- delboy->consumeHiddenToken = consumeHiddenToken;
- delboy->consumeNode = consumeNode;
- delboy->consumeToken = consumeToken;
- delboy->createNode = createNode;
- delboy->createNodeTok = createNodeTok;
- delboy->endBacktrack = endBacktrack;
- delboy->endResync = endResync;
- delboy->enterAlt = enterAlt;
- delboy->enterDecision = enterDecision;
- delboy->enterRule = enterRule;
- delboy->enterSubRule = enterSubRule;
- delboy->exitDecision = exitDecision;
- delboy->exitRule = exitRule;
- delboy->exitSubRule = exitSubRule;
- delboy->handshake = handshake;
- delboy->location = location;
- delboy->LT = LT;
- delboy->LTT = LTT;
- delboy->mark = mark;
- delboy->nilNode = nilNode;
- delboy->recognitionException = recognitionException;
- delboy->rewind = rewindMark;
- delboy->rewindLast = rewindLast;
- delboy->semanticPredicate = semanticPredicate;
- delboy->setTokenBoundaries = setTokenBoundaries;
- delboy->terminate = terminate;
- delboy->errorNode = errorNode;
-
- delboy->PROTOCOL_VERSION = 2; // ANTLR 3.1 is at protocol version 2
-
- delboy->port = DEFAULT_DEBUGGER_PORT;
-
- return delboy;
-}
-
-pANTLR3_DEBUG_EVENT_LISTENER
-antlr3DebugListenerNewPort(ANTLR3_UINT32 port)
-{
- pANTLR3_DEBUG_EVENT_LISTENER delboy;
-
- delboy = antlr3DebugListenerNew();
-
- if (delboy != NULL)
- {
- delboy->port = port;
- }
-
- return delboy;
-}
-
-//--------------------------------------------------------------------------------
-// Support functions for sending stuff over the socket interface
-//
-static int
-sockSend(SOCKET sock, const char * ptr, int len)
-{
- int sent;
- int thisSend;
-
- sent = 0;
-
- while (sent < len)
- {
- // Send as many bytes as we can
- //
- thisSend = send(sock, ptr, len - sent, 0);
-
- // Check for errors and tell the user if we got one
- //
- if (thisSend == -1)
- {
- return ANTLR3_FALSE;
- }
-
- // Increment our offset by how many we were able to send
- //
- ptr += thisSend;
- sent += thisSend;
- }
- return ANTLR3_TRUE;
-}
-
-static ANTLR3_BOOLEAN
-handshake (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- /// Connection structure with which to wait and accept a connection from
- /// a debugger.
- ///
- SOCKET serverSocket;
-
- // Connection structures to deal with the client after we accept the connection
- // and the server while we accept a connection.
- //
- ANTLR3_SOCKADDRT client;
- ANTLR3_SOCKADDRT server;
-
- // Buffer to construct our message in
- //
- char message[256];
-
- // Specifies the length of the connection structure to accept()
- // Windows use int, everyone else uses size_t
- //
- ANTLR3_SALENT sockaddr_len;
-
- // Option holder for setsockopt()
- //
- int optVal;
-
- if (delboy->initialized == ANTLR3_FALSE)
- {
- // Windows requires us to initialize WinSock.
- //
-#ifdef ANTLR3_WINDOWS
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err; // Return code from WSAStartup
-
- // We must initialise the Windows socket system when the DLL is loaded.
- // We are asking for Winsock 1.1 or better as we don't need anything
- // too complicated for this.
- //
- wVersionRequested = MAKEWORD( 1, 1);
-
- err = WSAStartup( wVersionRequested, &wsaData );
-
- if ( err != 0 )
- {
- // Tell the user that we could not find a usable
- // WinSock DLL
- //
- return FALSE;
- }
- }
-#endif
-
- // Create the server socket, we are the server because we just wait until
- // a debugger connects to the port we are listening on.
- //
- serverSocket = socket(AF_INET, SOCK_STREAM, 0);
-
- if (serverSocket == INVALID_SOCKET)
- {
- return ANTLR3_FALSE;
- }
-
- // Set the listening port
- //
- server.sin_port = htons((unsigned short)delboy->port);
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = htonl (INADDR_ANY);
-
- // We could allow a rebind on the same addr/port pair I suppose, but
- // I imagine that most people will just want to start debugging one parser at once.
- // Maybe change this at some point, but rejecting the bind at this point will ensure
- // that people realize they have left something running in the background.
- //
- if (bind(serverSocket, (pANTLR3_SOCKADDRC)&server, sizeof(server)) == -1)
- {
- return ANTLR3_FALSE;
- }
-
- // We have bound the socket to the port and address so we now ask the TCP subsystem
- // to start listening on that address/port
- //
- if (listen(serverSocket, 1) == -1)
- {
- // Some error, just fail
- //
- return ANTLR3_FALSE;
- }
-
- // Now we can try to accept a connection on the port
- //
- sockaddr_len = sizeof(client);
- delboy->socket = accept(serverSocket, (pANTLR3_SOCKADDRC)&client, &sockaddr_len);
-
- // Having accepted a connection, we can stop listening and close down the socket
- //
- shutdown (serverSocket, 0x02);
- ANTLR3_CLOSESOCKET (serverSocket);
-
- if (delboy->socket == -1)
- {
- return ANTLR3_FALSE;
- }
-
- // Disable Nagle as this is essentially a chat exchange
- //
- optVal = 1;
- setsockopt(delboy->socket, SOL_SOCKET, TCP_NODELAY, (const void *)&optVal, sizeof(optVal));
-
- }
-
- // We now have a good socket connection with the debugging client, so we
- // send it the protocol version we are using and what the name of the grammar
- // is that we represent.
- //
- sprintf (message, "ANTLR %d\n", delboy->PROTOCOL_VERSION);
- sockSend (delboy->socket, message, (int)strlen(message));
- sprintf (message, "grammar \"%s\n", delboy->grammarFileName->chars);
- sockSend (delboy->socket, message, (int)strlen(message));
- ack (delboy);
-
- delboy->initialized = ANTLR3_TRUE;
-
- return ANTLR3_TRUE;
-}
-
-// Send the supplied text and wait for an ack from the client
-static void
-transmit(pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * ptr)
-{
- sockSend(delboy->socket, ptr, (int)strlen(ptr));
- ack(delboy);
-}
-
-static void
-ack (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- // Local buffer to read the next character in to
- //
- char buffer;
- int rCount;
-
- // Ack terminates in a line feed, so we just wait for
- // one of those. Speed is not of the essence so we don't need
- // to buffer the input or anything.
- //
- do
- {
- rCount = recv(delboy->socket, &buffer, 1, 0);
- }
- while (rCount == 1 && buffer != '\n');
-
- // If the socket ws closed on us, then we will get an error or
- // (with a graceful close), 0. We can assume the the debugger stopped for some reason
- // (such as Java crashing again). Therefore we just exit the program
- // completely if we don't get the terminating '\n' for the ack.
- //
- if (rCount != 1)
- {
- ANTLR3_PRINTF("Exiting debugger as remote client closed the socket\n");
- ANTLR3_PRINTF("Received char count was %d, and last char received was %02X\n", rCount, buffer);
- exit(0);
- }
-}
-
-// Given a buffer string and a source string, serialize the
-// text, escaping any newlines and linefeeds. We have no need
-// for speed here, this is the debugger.
-//
-void
-serializeText(pANTLR3_STRING buffer, pANTLR3_STRING text)
-{
- ANTLR3_UINT32 c;
- ANTLR3_UCHAR character;
-
- // strings lead in with a "
- //
- buffer->append(buffer, "\t\"");
-
- if (text == NULL)
- {
- return;
- }
-
- // Now we replace linefeeds, newlines and the escape
- // leadin character '%' with their hex equivalents
- // prefixed by '%'
- //
- for (c = 0; c < text->len; c++)
- {
- switch (character = text->charAt(text, c))
- {
- case '\n':
-
- buffer->append(buffer, "%0A");
- break;
-
- case '\r':
-
- buffer->append(buffer, "%0D");
- break;
-
- case '\\':
-
- buffer->append(buffer, "%25");
- break;
-
- // Other characters: The Song Remains the Same.
- //
- default:
-
- buffer->addc(buffer, character);
- break;
- }
- }
-}
-
-// Given a token, create a stringified version of it, in the supplied
-// buffer. We create a string for this in the debug 'object', if there
-// is not one there already, and then reuse it here if asked to do this
-// again.
-//
-pANTLR3_STRING
-serializeToken(pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t)
-{
- // Do we already have a serialization buffer?
- //
- if (delboy->tokenString == NULL)
- {
- // No, so create one, using the string factory that
- // the grammar name used, which is guaranteed to exist.
- // 64 bytes will do us here for starters.
- //
- delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64);
- }
-
- // Empty string
- //
- delboy->tokenString->set(delboy->tokenString, (const char *)"");
-
- // Now we serialize the elements of the token.Note that the debugger only
- // uses 32 bits.
- //
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getTokenIndex(t)));
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getType(t)));
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getChannel(t)));
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getLine(t)));
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getCharPositionInLine(t)));
-
- // Now send the text that the token represents.
- //
- serializeText(delboy->tokenString, t->getText(t));
-
- // Finally, as the debugger is a Java program it will expect to get UTF-8
- // encoded strings. We don't use UTF-8 internally to the C runtime, so we
- // must force encode it. We have a method to do this in the string class, but
- // it returns malloc space that we must free afterwards.
- //
- return delboy->tokenString->toUTF8(delboy->tokenString);
-}
-
-// Given a tree node, create a stringified version of it in the supplied
-// buffer.
-//
-pANTLR3_STRING
-serializeNode(pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node)
-{
- pANTLR3_COMMON_TOKEN token;
-
-
- // Do we already have a serialization buffer?
- //
- if (delboy->tokenString == NULL)
- {
- // No, so create one, using the string factory that
- // the grammar name used, which is guaranteed to exist.
- // 64 bytes will do us here for starters.
- //
- delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64);
- }
-
- // Empty string
- //
- delboy->tokenString->set(delboy->tokenString, (const char *)"");
-
- // Protect against bugs/errors etc
- //
- if (node == NULL)
- {
- return delboy->tokenString;
- }
-
- // Now we serialize the elements of the node.Note that the debugger only
- // uses 32 bits.
- //
- delboy->tokenString->addc(delboy->tokenString, '\t');
-
- // Adaptor ID
- //
- delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, node));
- delboy->tokenString->addc(delboy->tokenString, '\t');
-
- // Type of the current token (which may be imaginary)
- //
- delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getType(delboy->adaptor, node));
-
- // See if we have an actual token or just an imaginary
- //
- token = delboy->adaptor->getToken(delboy->adaptor, node);
-
- delboy->tokenString->addc(delboy->tokenString, '\t');
- if (token != NULL)
- {
- // Real token
- //
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(token->getLine(token)));
- delboy->tokenString->addc(delboy->tokenString, ' ');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(token->getCharPositionInLine(token)));
- }
- else
- {
- // Imaginary tokens have no location
- //
- delboy->tokenString->addi(delboy->tokenString, -1);
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, -1);
- }
-
- // Start Index of the node
- //
- delboy->tokenString->addc(delboy->tokenString, '\t');
- delboy->tokenString->addi(delboy->tokenString, (ANTLR3_UINT32)(delboy->adaptor->getTokenStartIndex(delboy->adaptor, node)));
-
- // Now send the text that the node represents.
- //
- serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, node));
-
- // Finally, as the debugger is a Java program it will expect to get UTF-8
- // encoded strings. We don't use UTF-8 internally to the C runtime, so we
- // must force encode it. We have a method to do this in the string class, but
- // there is no utf8 string implementation as of yet
- //
- return delboy->tokenString->toUTF8(delboy->tokenString);
-}
-
-//------------------------------------------------------------------------------------------------------------------
-// EVENTS
-//
-static void
-enterRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "enterRule\t%s\t%s\n", grammarFileName, ruleName);
- transmit(delboy, buffer);
-}
-
-static void
-enterAlt (pANTLR3_DEBUG_EVENT_LISTENER delboy, int alt)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "enterAlt\t%d\n", alt);
- transmit(delboy, buffer);
-}
-
-static void
-exitRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "exitRule\t%s\t%s\n", grammarFileName, ruleName);
- transmit(delboy, buffer);
-}
-
-static void
-enterSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "enterSubRule\t%d\n", decisionNumber);
- transmit(delboy, buffer);
-}
-
-static void
-exitSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "exitSubRule\t%d\n", decisionNumber);
- transmit(delboy, buffer);
-}
-
-static void
-enterDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "enterDecision\t%d\n", decisionNumber);
- transmit(delboy, buffer);
-
-}
-
-static void
-exitDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber)
-{
- char buffer[512];
-
- // Create the message (speed is not of the essence)
- //
- sprintf(buffer, "exitDecision\t%d\n", decisionNumber);
- transmit(delboy, buffer);
-}
-
-static void
-consumeToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t)
-{
- pANTLR3_STRING msg;
-
- // Create the serialized token
- //
- msg = serializeToken(delboy, t);
-
- // Insert the debug event indicator
- //
- msg->insert8(msg, 0, "consumeToken\t");
-
- msg->addc(msg, '\n');
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, (const char *)(msg->chars));
-}
-
-static void
-consumeHiddenToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t)
-{
- pANTLR3_STRING msg;
-
- // Create the serialized token
- //
- msg = serializeToken(delboy, t);
-
- // Insert the debug event indicator
- //
- msg->insert8(msg, 0, "consumeHiddenToken\t");
-
- msg->addc(msg, '\n');
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, (const char *)(msg->chars));
-}
-
-// Looking at the next token event.
-//
-static void
-LT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_COMMON_TOKEN t)
-{
- pANTLR3_STRING msg;
-
- if (t != NULL)
- {
- // Create the serialized token
- //
- msg = serializeToken(delboy, t);
-
- // Insert the index parameter
- //
- msg->insert8(msg, 0, "\t");
- msg->inserti(msg, 0, i);
-
- // Insert the debug event indicator
- //
- msg->insert8(msg, 0, "LT\t");
-
- msg->addc(msg, '\n');
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, (const char *)(msg->chars));
- }
-}
-
-static void
-mark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker)
-{
- char buffer[128];
-
- sprintf(buffer, "mark\t%d\n", (ANTLR3_UINT32)(marker & 0xFFFFFFFF));
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-}
-
-static void
-rewindMark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker)
-{
- char buffer[128];
-
- sprintf(buffer, "rewind\t%d\n", (ANTLR3_UINT32)(marker & 0xFFFFFFFF));
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-
-}
-
-static void
-rewindLast (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- transmit(delboy, (const char *)"rewind\n");
-}
-
-static void
-beginBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level)
-{
- char buffer[128];
-
- sprintf(buffer, "beginBacktrack\t%d\n", (ANTLR3_UINT32)(level & 0xFFFFFFFF));
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-}
-
-static void
-endBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level, ANTLR3_BOOLEAN successful)
-{
- char buffer[128];
-
- sprintf(buffer, "endBacktrack\t%d\t%d\n", level, successful);
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-}
-
-static void
-location (pANTLR3_DEBUG_EVENT_LISTENER delboy, int line, int pos)
-{
- char buffer[128];
-
- sprintf(buffer, "location\t%d\t%d\n", line, pos);
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-}
-
-static void
-recognitionException (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_EXCEPTION e)
-{
- char buffer[256];
-
- sprintf(buffer, "exception\t%s\t%d\t%d\t%d\n", (char *)(e->name), (ANTLR3_INT32)(e->index), e->line, e->charPositionInLine);
-
- // Transmit the message and wait for ack
- //
- transmit(delboy, buffer);
-}
-
-static void
-beginResync (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- transmit(delboy, (const char *)"beginResync\n");
-}
-
-static void
-endResync (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- transmit(delboy, (const char *)"endResync\n");
-}
-
-static void
-semanticPredicate (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_BOOLEAN result, const char * predicate)
-{
- unsigned char * buffer;
- unsigned char * out;
-
- if (predicate != NULL)
- {
- buffer = (unsigned char *)ANTLR3_MALLOC(64 + 2*strlen(predicate));
-
- if (buffer != NULL)
- {
- out = buffer + sprintf((char *)buffer, "semanticPredicate\t%s\t", result == ANTLR3_TRUE ? "true" : "false");
-
- while (*predicate != '\0')
- {
- switch(*predicate)
- {
- case '\n':
-
- *out++ = '%';
- *out++ = '0';
- *out++ = 'A';
- break;
-
- case '\r':
-
- *out++ = '%';
- *out++ = '0';
- *out++ = 'D';
- break;
-
- case '%':
-
- *out++ = '%';
- *out++ = '0';
- *out++ = 'D';
- break;
-
-
- default:
-
- *out++ = *predicate;
- break;
- }
-
- predicate++;
- }
- *out++ = '\n';
- *out++ = '\0';
- }
-
- // Send it and wait for the ack
- //
- transmit(delboy, (const char *)buffer);
- }
-}
-
-#ifdef ANTLR3_WINDOWS
-#pragma warning (push)
-#pragma warning (disable : 4100)
-#endif
-
-static void
-commence (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- // Nothing to see here
- //
-}
-
-#ifdef ANTLR3_WINDOWS
-#pragma warning (pop)
-#endif
-
-static void
-terminate (pANTLR3_DEBUG_EVENT_LISTENER delboy)
-{
- // Terminate sequence
- //
- sockSend(delboy->socket, "terminate\n", 10); // Send out the command
-}
-
-//----------------------------------------------------------------
-// Tree parsing events
-//
-static void
-consumeNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t)
-{
- pANTLR3_STRING buffer;
-
- buffer = serializeNode (delboy, t);
-
- // Now prepend the command
- //
- buffer->insert8 (buffer, 0, "consumeNode\t");
- buffer->addc (buffer, '\n');
-
- // Send to the debugger and wait for the ack
- //
- transmit (delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars));
-}
-
-static void
-LTT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_BASE_TREE t)
-{
- pANTLR3_STRING buffer;
-
- buffer = serializeNode (delboy, t);
-
- // Now prepend the command
- //
- buffer->insert8 (buffer, 0, "\t");
- buffer->inserti (buffer, 0, i);
- buffer->insert8 (buffer, 0, "LN\t");
- buffer->addc (buffer, '\n');
-
- // Send to the debugger and wait for the ack
- //
- transmit (delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars));
-}
-
-static void
-nilNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t)
-{
- char buffer[128];
- sprintf(buffer, "nilNode\t%d\n", delboy->adaptor->getUniqueID(delboy->adaptor, t));
- transmit(delboy, buffer);
-}
-
-static void
-createNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t)
-{
- // Do we already have a serialization buffer?
- //
- if (delboy->tokenString == NULL)
- {
- // No, so create one, using the string factory that
- // the grammar name used, which is guaranteed to exist.
- // 64 bytes will do us here for starters.
- //
- delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64);
- }
-
- // Empty string
- //
- delboy->tokenString->set8(delboy->tokenString, (const char *)"createNodeFromTokenElements ");
-
- // Now we serialize the elements of the node.Note that the debugger only
- // uses 32 bits.
- //
- // Adaptor ID
- //
- delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, t));
- delboy->tokenString->addc(delboy->tokenString, '\t');
-
- // Type of the current token (which may be imaginary)
- //
- delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getType(delboy->adaptor, t));
-
- // The text that this node represents
- //
- serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, t));
- delboy->tokenString->addc(delboy->tokenString, '\n');
-
- // Finally, as the debugger is a Java program it will expect to get UTF-8
- // encoded strings. We don't use UTF-8 internally to the C runtime, so we
- // must force encode it. We have a method to do this in the string class, but
- // there is no utf8 string implementation as of yet
- //
- transmit(delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars));
-
-}
-static void
-errorNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t)
-{
- // Do we already have a serialization buffer?
- //
- if (delboy->tokenString == NULL)
- {
- // No, so create one, using the string factory that
- // the grammar name used, which is guaranteed to exist.
- // 64 bytes will do us here for starters.
- //
- delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64);
- }
-
- // Empty string
- //
- delboy->tokenString->set8(delboy->tokenString, (const char *)"errorNode\t");
-
- // Now we serialize the elements of the node.Note that the debugger only
- // uses 32 bits.
- //
- // Adaptor ID
- //
- delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, t));
- delboy->tokenString->addc(delboy->tokenString, '\t');
-
- // Type of the current token (which is an error)
- //
- delboy->tokenString->addi(delboy->tokenString, ANTLR3_TOKEN_INVALID);
-
- // The text that this node represents
- //
- serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, t));
- delboy->tokenString->addc(delboy->tokenString, '\n');
-
- // Finally, as the debugger is a Java program it will expect to get UTF-8
- // encoded strings. We don't use UTF-8 internally to the C runtime, so we
- // must force encode it. We have a method to do this in the string class, but
- // there is no utf8 string implementation as of yet
- //
- transmit(delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars));
-
-}
-
-static void
-createNodeTok (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node, pANTLR3_COMMON_TOKEN token)
-{
- char buffer[128];
-
- sprintf(buffer, "createNode\t%d\t%d\n", delboy->adaptor->getUniqueID(delboy->adaptor, node), (ANTLR3_UINT32)token->getTokenIndex(token));
-
- transmit(delboy, buffer);
-}
-
-static void
-becomeRoot (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot)
-{
- char buffer[128];
-
- sprintf(buffer, "becomeRoot\t%d\t%d\n", delboy->adaptor->getUniqueID(delboy->adaptor, newRoot),
- delboy->adaptor->getUniqueID(delboy->adaptor, oldRoot)
- );
- transmit(delboy, buffer);
-}
-
-
-static void
-addChild (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE root, pANTLR3_BASE_TREE child)
-{
- char buffer[128];
-
- sprintf(buffer, "addChild\t%d\t%d\n", delboy->adaptor->getUniqueID(delboy->adaptor, root),
- delboy->adaptor->getUniqueID(delboy->adaptor, child)
- );
- transmit(delboy, buffer);
-}
-
-static void
-setTokenBoundaries (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t, ANTLR3_MARKER tokenStartIndex, ANTLR3_MARKER tokenStopIndex)
-{
- char buffer[128];
-
- sprintf(buffer, "becomeRoot\t%d\t%d\t%d\n", delboy->adaptor->getUniqueID(delboy->adaptor, t),
- (ANTLR3_UINT32)tokenStartIndex,
- (ANTLR3_UINT32)tokenStopIndex
- );
- transmit(delboy, buffer);
-}
-#endif
-