示例#1
0
 private static IExpressionNode BuildExpression(
     ISyntaxNode node,
     IFunctionDictionary functions,
     VariableDictionary variables,
     TypeInferenceResults typeInferenceResults,
     TicTypesConverter typesConverter) =>
 node.Accept(new ExpressionBuilderVisitor(functions, variables, typeInferenceResults, typesConverter));
示例#2
0
        public static bool ComeOver(this ISyntaxNode root, ISyntaxNodeVisitor <VisitorEnterResult> enterVisitor,
                                    ISyntaxNodeVisitor <bool> exitVisitor)
        {
            var enterResult = root.Accept(enterVisitor);

            if (enterResult == VisitorEnterResult.Failed)
            {
                return(false);
            }
            if (enterResult == VisitorEnterResult.Skip)
            {
                return(true);
            }

            foreach (var child in root.Children)
            {
                if (!child.ComeOver(enterVisitor, exitVisitor))
                {
                    return(false);
                }
            }
            return(root.Accept(exitVisitor));
        }
示例#3
0
        public static IExpressionNode BuildExpression(
            ISyntaxNode node,
            IFunctionDictionary functions,
            FunnyType outputType,
            VariableDictionary variables,
            TypeInferenceResults typeInferenceResults,
            TicTypesConverter typesConverter)
        {
            var result = node.Accept(
                new ExpressionBuilderVisitor(functions, variables, typeInferenceResults, typesConverter));

            if (result.Type == outputType)
            {
                return(result);
            }
            var converter = VarTypeConverter.GetConverterOrThrow(result.Type, outputType, node.Interval);

            return(new CastExpressionNode(result, outputType, converter, node.Interval));
        }
示例#4
0
 private IExpressionNode ReadNode(ISyntaxNode node)
 => node.Accept(this);
示例#5
0
 public static string ToShortText(ISyntaxNode node) => node.Accept(new ShortDescritpionVisitor());