Exemple #1
0
        private AST Pointer()
        {
            if (currentToken.Type == TokenType.TILDE)
            {
                Eat(TokenType.TILDE);
                StringToken nodeToken = new StringToken(TokenType.ID, "Node", currentToken.Line, currentToken.Column, file);
                return(new IdAST(nodeToken));
            }
            else if (currentToken.Type == TokenType.AT)
            {
                Eat(TokenType.AT);
                StringToken inputToken = new StringToken(TokenType.ID, "InputMarker", currentToken.Line, currentToken.Column, file);
                return(new IdAST(inputToken));
            }
            else if (currentToken.Type == TokenType.DOLL)
            {
                Eat(TokenType.DOLL);
                StringToken outputToken = new StringToken(TokenType.ID, "OutputSink", currentToken.Line, currentToken.Column, file);
                return(new IdAST(outputToken));
            }
            StringToken idToken    = Eat(TokenType.ID) as StringToken;
            AST         pointerAST = new IdAST(idToken);

            while (currentToken.Type == TokenType.DOT)
            {
                Eat(TokenType.DOT);
                idToken    = Eat(TokenType.ID) as StringToken;
                pointerAST = new PointerAST(pointerAST, new IdAST(idToken));
            }
            return(pointerAST);
        }
Exemple #2
0
        private object Visit(IdAST idAST)
        {
            Symbol symbol = currentScope.Lookup(idAST.Id);

            if (symbol == null)
            {
                TypeSymbol typeSymbol = currentScope.Lookup("Node") as TypeSymbol;
                Node       node       = typeSymbol.GetValue() as Node;
                node.Name = idAST.Id;
                ModelSymbol modelSymbol = new ModelSymbol(idAST.Id, typeSymbol, node);
                currentScope.Insert(modelSymbol);
                return(node);
                // throw logger.Error(new SemanticException(idAST.FindToken(), $"Undefined variable {idAST.Id}"));
            }
            else
            {
                return(symbol.GetValue());
            }
        }