public GameObjectNode VisitGameObject(DazelParser.GameObjectContext context) { GameObjectTypeNode typeNode; switch (context.gameObjectType.Type) { case DazelLexer.SCREEN: typeNode = new ScreenNode(); break; case DazelLexer.ENTITY: typeNode = new EntityNode(); break; case DazelLexer.MOVE_PATTERN: typeNode = new MovePatternNode(); break; default: throw new ArgumentException("Type is not a GameObjectType!"); } GameObjectNode gameObjectNode = new GameObjectNode() { Token = context.Start, Identifier = context.GetChild(1).GetText(), TypeNode = typeNode, Contents = VisitGameObjectContents(context.gameObjectBlock().gameObjectContents()) }; return(gameObjectNode); }
public AbstractSyntaxTree BuildAst(IEnumerable <IParseTree> parseTrees) { Dictionary <string, GameObjectNode> gameObjects = new Dictionary <string, GameObjectNode>(); foreach (IParseTree parseTree in parseTrees) { DazelParser.GameObjectContext gameObjectContext = parseTree.GetChild(0) as DazelParser.GameObjectContext; GameObjectNode gameObjectNode = VisitGameObject(gameObjectContext); gameObjects.Add(gameObjectNode.Identifier, gameObjectNode); } RootNode root = new RootNode() { GameObjects = gameObjects }; return(new AbstractSyntaxTree(root)); }
/// <summary> /// Exit a parse tree produced by <see cref="DazelParser.gameObject"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitGameObject([NotNull] DazelParser.GameObjectContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="DazelParser.gameObject"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitGameObject([NotNull] DazelParser.GameObjectContext context) { return(VisitChildren(context)); }