/******************************************************************************* * Copyright (c) 2007, 2008 Edgar Espina. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.deved.antlride.debug.model.event; import org.deved.antlride.core.model.IGrammar; import org.deved.antlride.debug.model.AntlrDebugTarget; public class AntlrDebugEventFactory { private AntlrDebugEventKind type; private AntlrDebugEventFactory() { } public static AntlrDebugEvent createFromString( AntlrDebugTarget debugTarget, String event) { return createFromString(debugTarget, debugTarget.getGrammar(), event); } public static AntlrDebugEvent createFromString( AntlrDebugTarget debugTarget, IGrammar grammar, String event) { String[] properties = event.split("\\s"); AntlrDebugEvent debugEvent = null; AntlrDebugEventKind eventKind = AntlrDebugEventKind.fromString(event); switch (eventKind) { case PROTOCOL: { debugEvent = new AntlrDebugProtocolEvent(debugTarget, eventKind, properties); } break; case GRAMMAR: { debugEvent = new AntlrDebugGrammarEvent(debugTarget, eventKind, properties); } break; case ENTER_RULE: case EXIT_RULE: { debugEvent = new AntlrDebugRuleEvent(debugTarget, eventKind, properties); } break; case ENTER_SUB_RULE: case EXIT_SUB_RULE: { debugEvent = new AntlrDebugSubRuleEvent(debugTarget, eventKind, properties); } break; case ENTER_DECISION: case EXIT_DECISION: { debugEvent = new AntlrDebugDecisionEvent(debugTarget, eventKind, properties); } break; case LOCATION: { debugEvent = new AntlrDebugLocationEvent(debugTarget, eventKind, properties); } break; case ENTER_ALT: { debugEvent = new AntlrDebugAlternativeEvent(debugTarget, eventKind, properties); } break; case LT: { AntlrDebugLTEvent ltEvent = new AntlrDebugLTEvent(debugTarget, eventKind, properties); // ltEvent.setTokenName(grammar.getTokenName(ltEvent.getType())); ltEvent.setTokenName(ltEvent.getText()); debugEvent = ltEvent; } break; case LN: { debugEvent = new AntlrDebugLNEvent(debugTarget, eventKind, properties); } break; case CONSUME_HIDDEN_TOKEN: case CONSUME_TOKEN: { AntlrDebugTokenEvent consumeTokenEvent = new AntlrDebugTokenEvent( debugTarget, eventKind, event, properties); consumeTokenEvent.setTokenName(consumeTokenEvent.getText()); // consumeTokenEvent.setTokenName(grammar // .getTokenName(consumeTokenEvent.getType())); debugEvent = consumeTokenEvent; } break; case EXCEPTION: { debugEvent = new AntlrDebugExceptionEvent(debugTarget, eventKind, event, properties); } break; case CREATE_NODE_FROM_TOKEN_ELEMENTS: { debugEvent = new AntlrDebugNodeFromTokenElementsEvent(debugTarget, eventKind, properties); } break; case NIL_NODE: { debugEvent = new AntlrDebugNilNodeEvent(debugTarget, eventKind, properties); } break; case BECOME_ROOT: { debugEvent = new AntlrDebugBecomeRootEvent(debugTarget, eventKind, properties); } break; case CREATE_NODE: { debugEvent = new AntlrDebugCreateNodeEvent(debugTarget, eventKind, properties); } break; case ADD_CHILD: { debugEvent = new AntlrDebugAddChildEvent(debugTarget, eventKind, properties); } break; case BEGIN_BACKTRACK: case END_BACKTRACK: { debugEvent = new AntlrDebugBacktrackEvent(debugTarget, eventKind, properties); } break; case BEGIN_RESYNC: case END_RESYNC: { debugEvent = new AntlrDebugResyncEvent(debugTarget, eventKind); } break; case ERROR_NODE: { debugEvent = new AntlrDebugErrorNodeEvent(debugTarget, eventKind, properties); } break; case CONSUME_NODE: { debugEvent = new AntlrDebugConsumeNodeEvent(debugTarget, eventKind, properties); } break; case MARK: { debugEvent = new AntlrDebugMarkEvent(debugTarget, eventKind, properties); } break; case REWIND: { debugEvent = new AntlrDebugRewindEvent(debugTarget, eventKind, properties); } break; case SEMANTIC_PREDICATE: { debugEvent = new AntlrDebugSemanticPredicateEvent(debugTarget, eventKind, properties); } break; case SET_TOKEN_BOUNDARIES: { debugEvent = new AntlrDebugTokenBoundariesEvent(debugTarget, eventKind, properties); } break; case TERMINATE: { debugEvent = new AntlrDebugTerminateEvent(debugTarget, eventKind); } break; } // create event return debugEvent; } public AntlrDebugEventKind getType() { return type; } }