private void ProcessCallStatement(CallStatementNode theCallStatementNode)
        {
            var visualizer     = this.context.GetVisualizerByName(theCallStatementNode.VizualizerName.Name);
            var visualizerCall = CreateVisualizerCallFrom(theCallStatementNode);

            visualizer.UpdateWith(visualizerCall);
        }
Example #2
0
        public void Visit(CallStatementNode node)
        {
            VerifyCall(node);
            var  procedureName = node.AnchorToken.Lexeme;
            Type type          = procedureTable[procedureName].type;

            if (type != Type.VOID)
            {
                builder.AppendLine("\t\tpop");
            }
        }
        private VisualizerCall CreateVisualizerCallFrom(CallStatementNode theCallStatementNode)
        {
            var arguments = new List <CallArgument>();

            foreach (var anArgument in theCallStatementNode.Arguments.Arguments)
            {
                var value = ConvertToValueFrom(anArgument);
                arguments.Add(new CallArgument(anArgument.Name.Name, value));
            }
            return(new VisualizerCall(arguments));
        }
Example #4
0
        public Node AssignmentOrCallStatement()
        {
            var  id_node = Node.fromToken(Expect(TokenCategory.IDENTIFIER));
            Node node    = null;

            if (Has(TokenCategory.PARENTHESIS_OPEN))
            {
                node = new CallStatementNode()
                {
                    AnchorToken = id_node.AnchorToken
                };
                Expect(TokenCategory.PARENTHESIS_OPEN);
                node.Add(Optional(firstOfExpression, () =>
                {
                    var list = new List <Node>()
                    {
                        Expression()
                    };
                    list.AddRange(ZeroOrMore(TokenCategory.COMMA, Expression, true));
                    return(list);
                }));
                Expect(TokenCategory.PARENTHESIS_CLOSE);
            }
            else if (Has(TokenCategory.BRACKET_OPEN) || Has(TokenCategory.COLON_EQUAL))
            {
                node = new AssignmentNode();
                if (Has(TokenCategory.BRACKET_OPEN))
                {
                    Expect(TokenCategory.BRACKET_OPEN);
                    var expression_node = Expression();
                    Expect(TokenCategory.BRACKET_CLOSE);
                    node.Add(new ListIndexNode()
                    {
                        id_node, expression_node
                    });
                }
                else
                {
                    node.Add(id_node);
                }
                node.AnchorToken = Expect(TokenCategory.COLON_EQUAL);
                node.Add(Expression());
            }
            else
            {
                throw new SyntaxError(firstOfAssignmentOrCallStatement, tokenStream.Current);
            }
            Expect(TokenCategory.SEMICOLON);
            return(node);
        }
Example #5
0
 public Type Visit(CallStatementNode node)
 {
     VerifyCall(node);
     return(Type.VOID);
 }