Esempio n. 1
0
        private RouteAST Route()
        {
            Eat(TokenType.ROUTE);
            AST definition = Inherit();

            Eat(TokenType.LPAR);
            RouteParamsAST routeParamsAST;

            if (currentToken.Type != TokenType.SEMIC)
            {
                routeParamsAST = RouteParameters();
            }
            else
            {
                routeParamsAST = new RouteParamsAST(new List <RouteParamAST>());
            }
            Eat(TokenType.SEMIC);
            RouteInPortAST inPortAST;

            if (currentToken.Type != TokenType.SEMIC)
            {
                inPortAST = RouteInPorts();
            }
            else
            {
                inPortAST = new RouteInPortAST(new List <AST>());
            }
            Eat(TokenType.SEMIC);
            RoutePortAST outPortAST;

            if (currentToken.Type != TokenType.RPAR)
            {
                outPortAST = RoutePorts();
            }
            else
            {
                outPortAST = new RoutePortAST(new List <WordAST>());
            }
            Eat(TokenType.RPAR);
            StatementsAST statementsAST = Statements();

            Eat(TokenType.END);
            return(new RouteAST(definition, routeParamsAST, inPortAST, outPortAST, statementsAST));
        }
Esempio n. 2
0
        private List <RouteInPort> Visit(RouteInPortAST routeInPortAST)
        {
            return(routeInPortAST.Ports.ConvertAll(routePort =>
            {
                switch (Visit(routePort))
                {
                case string name:
                    return new RouteInPort()
                    {
                        Name = name, Nullable = false
                    };

                case RouteInPort routeInPort:
                    return routeInPort;

                default:
                    throw logger.Error(new SemanticException(routePort.FindToken(), "Unknown type for in port."));
                }
            }));
        }