private SignatureAST Signature() { Eat(TokenType.SIGN); StringToken typeNameToken = Eat(TokenType.ID) as StringToken; WordAST typeName = new WordAST(typeNameToken); Eat(TokenType.LPAR); RoutePortAST inPortAST; if (currentToken.Type != TokenType.SEMIC) { inPortAST = RoutePorts(); } else { inPortAST = new RoutePortAST(new List <WordAST>()); } Eat(TokenType.SEMIC); RoutePortAST outPortAST; if (currentToken.Type != TokenType.RPAR) { outPortAST = RoutePorts(); } else { outPortAST = new RoutePortAST(new List <WordAST>()); } Eat(TokenType.RPAR); Eat(TokenType.SEMIC); return(new SignatureAST(typeName, inPortAST, outPortAST)); }
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)); }
private List <string> Visit(RoutePortAST routePortAST) { return(routePortAST.Ports.ConvertAll(routePort => (Visit(routePort)))); }