Пример #1
0
 CompoundSyntax(Statement[] statements, Syntax syntax, Value cleanupSection = null)
     : base(_nextObjectId++, syntax)
 {
     _statements = statements;
     _data = GetData;
     CleanupSection = cleanupSection;
 }
Пример #2
0
 internal static Result<Value> Create
     (Result<Statement[]> left, Result<Value> right, Syntax syntax)
     => new Result<Value>
     (
         new CompoundSyntax(left.Target, syntax, right?.Target),
         left.Issues.plus(right?.Issues)
     );
Пример #3
0
 CondSyntax(Value condSyntax, Value thenSyntax, Value elseSyntax, Syntax syntax)
     : base(syntax)
 {
     Cond = condSyntax;
     Then = thenSyntax;
     Else = elseSyntax;
 }
Пример #4
0
 internal static Syntax CreateSourceSyntax
     (
         Syntax left,
         ITokenClass tokenClass,
         IToken token,
         Syntax right)
     => new Syntax(left, tokenClass, token, right);
Пример #5
0
 Result<Value> IValueProvider.Get(Syntax syntax)
 {
     var statements = syntax.Left?.ForceStatements;
     if(statements == null)
         statements = new Statement[0];
     var cleanup = syntax.Right?.Value;
     return CompoundSyntax.Create(statements, cleanup, syntax);
 }
Пример #6
0
 internal static Result<Parser.Value> Create
     (Syntax left, bool isImplicit, bool isMetaFunction, Syntax right, Syntax syntax)
 {
     var leftvalue = left?.Value;
     var rightvalue = right?.Value;
     var target = new FunctionSyntax
         (leftvalue?.Target, isImplicit, isMetaFunction, rightvalue?.Target,syntax);
     var issues = leftvalue?.Issues.plus(rightvalue?.Issues);
     return new Result<Parser.Value>(target, issues);
 }
Пример #7
0
 internal CodeContainer
     (string moduleName, Root root, Syntax syntax, string description)
 {
     ModuleName = moduleName;
     Root = root;
     MainCache = new ValueCache<Container>
         (() => root.MainContainer(syntax, description));
     CSharpStringCache = new ValueCache<string>(GetCSharpStringForCache);
     _functions = new FunctionCache<int, FunctionContainer>(Root.FunctionContainer);
 }
Пример #8
0
        Result<Value> IValueProvider.Get(Syntax syntax)
        {
            if(syntax.Left != null && syntax.Right != null)
                return InfixSyntax.Create(syntax.Left.Value, this, syntax.Right.Value, syntax);

            if(syntax.Left == null && syntax.Right != null)
                return PrefixSyntax.Create(this, syntax.Right.Value, syntax);

            NotImplementedMethod(syntax);
            return null;
        }
Пример #9
0
 internal static Result<Value> Create
     (Syntax condition, Syntax thenSyntax, Syntax elseSyntax, Syntax syntax)
 {
     var conditionValue = condition.Value;
     var thenValue = thenSyntax?.Value;
     var elseValue = elseSyntax?.Value;
     var result = new CondSyntax
         (conditionValue.Target, thenValue?.Target, elseValue?.Target, syntax);
     var issues = conditionValue.Issues.plus(thenValue?.Issues).plus(elseValue?.Issues);
     return new Result<Value>(result, issues);
 }
Пример #10
0
        Result<Statement[]> IStatementsProvider.Get
            (List type, Syntax syntax, IDefaultScopeProvider container)
        {
            if(type != null && type != this)
                return null;

            var leftStatements = CreateStatements(syntax.Left, syntax, container);
            var rightStatements = CreateStatements(syntax.Right, syntax, container);
            var target = leftStatements?.Target.plus(rightStatements?.Target);
            var issues = leftStatements?.Issues.plus(rightStatements?.Issues);
            return new Result<Statement[]>(target, issues);
        }
Пример #11
0
 Frame(Syntax target, Frame parent = null, HierachicalFormatter formatter = null)
 {
     Parent = parent;
     Formatter = parent?.Formatter ?? formatter;
     Target = target;
     LeftCache = new ValueCache<Frame>(() => new Frame(Target.Left, this));
     RightCache = new ValueCache<Frame>(() => new Frame(Target.Right, this));
     ItemsWithoutLeadingBreaksCache = new ValueCache<ResultItems>
         (GetItemsWithoutLeadingBreaks);
     LeadingLineBreaksCache = new ValueCache<int>(GetLeadingLineBreaksForCache);
     HasInnerLineBreaksCache = new ValueCache<bool>(GetHasInnerLineBreaksForCache);
 }
Пример #12
0
 FunctionSyntax
     (
     Parser.Value setter,
     bool isImplicit,
     bool isMetaFunction,
     Parser.Value getter, Syntax syntax)
     : base(syntax)
 {
     Getter = getter;
     Setter = setter;
     IsImplicit = isImplicit;
     IsMetaFunction = isMetaFunction;
 }
Пример #13
0
        Result<Declarator> IDeclaratorTokenClass.Get(Syntax syntax)
        {
            if(syntax.Right == null)
            {
                if(syntax.Left == null)
                    return new Declarator(null, this,syntax.SourcePart);

                return syntax.Left.Declarator?.Target.WithName(this,syntax.SourcePart);
            }

            Tracer.FlaggedLine(nameof(syntax) + "=" + syntax);
            return null;
        }
Пример #14
0
        Result<Value> IValueProvider.Get(Syntax syntax)
        {
            if(syntax.Left == null && syntax.Right == null)
                return new TerminalSyntax(this, syntax);

            if(syntax.Left != null && syntax.Right == null)
            {
                return new TerminalSyntax(this, syntax)
                    .Issues<Value>
                    (
                    IssueId.TerminalUsedAsSuffix
                    .Create(syntax.Left.SourcePart));
            }

            NotImplementedMethod(syntax);
            return null;
        }
Пример #15
0
        static IEnumerable<IItem1> GetItems
            (Syntax target)
        {
            var whiteSpaceParts = target.Token.PrecededWith.ToArray();
            for(var index = 0; index < whiteSpaceParts.Length; index++)
            {
                var lines = whiteSpaceParts[index].SourcePart.Id.Count(c => c == '\n');

                for(var lineIndex = 0; lineIndex < lines; lineIndex++)
                {
                    IItem1 item = new WhiteSpaceItem(index, lineIndex, target);
                    yield return item;
                }

                yield return new WhiteSpaceItem(index, lines, target);
            }

            yield return new TokenItem(target);
        }
Пример #16
0
        Syntax
        (
            Syntax left,
            ITokenClass tokenClass,
            IToken token,
            Syntax right)
            : base(NextObjectId++)
        {
            Left = left;
            TokenClass = tokenClass;
            Token = token;
            Right = right;
            Option = new SyntaxOption(this);
            LocatePositionCache = new FunctionCache<int, Syntax>(LocatePositionForCache);

            if(Left != null)
                Left.Parent = this;

            if(Right != null)
                Right.Parent = this;
        }
Пример #17
0
        bool IDeclarationItem.IsDeclarationPart(Syntax syntax)
        {
            var token = syntax.Token.SourcePart();

            var parentTokenClass = syntax.Parent.TokenClass;
            if(parentTokenClass is Colon)
                return syntax.Parent.Left == syntax;

            if(parentTokenClass is LeftParenthesis ||
                parentTokenClass is Definable ||
                parentTokenClass is ThenToken ||
                parentTokenClass is List ||
                parentTokenClass is Function ||
                parentTokenClass is TypeOperator ||
                parentTokenClass is ElseToken ||
                parentTokenClass is ScannerSyntaxError)
                return false;

            Tracer.FlaggedLine(nameof(syntax) + "=" + syntax);
            return false;
        }
Пример #18
0
        internal Result Execute
            (
            Category category,
            ResultCache left,
            Syntax token,
            ContextBase context,
            Parser.Value right)
        {
            var trace = ObjectId.In(34) && category.HasCode;
            StartMethodDump(trace, category, left, token, context, right);
            try
            {
                var metaFeature = ((IMetaImplementation) Feature).Function;
                if(metaFeature != null)
                    return metaFeature.Result(category, left, context, right);

                BreakExecution();
                var result = Feature.Result(category.Typed, token, context, right);
                Dump(nameof(result), result);
                Dump("ConverterPath.Destination.CheckedReference", ConverterPath.Destination.CheckedReference);
                Dump("ConverterPath.Execute", ConverterPath.Execute(Category.Code));
                BreakExecution();

                var replaceAbsolute = result
                    .ReplaceAbsolute
                    (ConverterPath.Destination.CheckedReference, ConverterPath.Execute);
                Dump(nameof(replaceAbsolute), replaceAbsolute);
                if(trace)
                    Dump(nameof(left), left.Code);
                BreakExecution();

                return ReturnMethodDump(replaceAbsolute.ReplaceArg(left));

            }
            finally
            {
                EndMethodDump();
            }
        }
Пример #19
0
        string IFormatter.Reformat(Syntax target, SourcePart part)
        {
            var rawLines = target
                    .Chain(item => item.Parent)
                    .Last()
                    .Items
                    .OrderBy(item => item.Token.SourcePart().Position)
                    .SelectMany(GetItems)
                    .NullableToArray()
                    .Select(CreateLine)
                ;

            while(rawLines.Any(IsTooLongLine))
                rawLines = rawLines.SelectMany(LineBreaker);

            var result = rawLines.Filter(part);

            if(rawLines.Any(IsTooLongLine))
                NotImplementedMethod(result, part);

            return result;
        }
Пример #20
0
 internal SyntaxToken(Syntax syntax) { Syntax = syntax; }
Пример #21
0
 Result<Value> IValueProvider.Get(Syntax syntax)
     =>
     FunctionSyntax.Create(syntax.Left, _isImplicit, _isMetaFunction, syntax.Right, syntax);
Пример #22
0
 protected override Result Result
     (ContextBase context, Category category, Value right, Syntax token)
     => context.FunctionalArgResult(category, right, token);
Пример #23
0
 protected override Result Result
     (ContextBase context, Category category, Value right, Syntax token)
 {
     NotImplementedMethod(context, category, token, right);
     return null;
 }
Пример #24
0
 protected abstract Result Result
     (ContextBase callContext, Category category, Value right, Syntax token);
Пример #25
0
 Result IPrefix.Result
     (ContextBase context, Category category, Value right, Syntax token)
     => Result(context, category, right, token);
Пример #26
0
        Result<Value> GetValue(Syntax syntax)
        {
            var value = Option.Value;
            if(value != null)
                return value;

            var statement = Option.Statement;
            if(statement != null)
                return CompoundSyntax.Create(statement, syntax);

            var statements = Option.Statements;
            if(statements != null)
                return CompoundSyntax.Create(statements, syntax);

            return IssueId.InvalidExpression.Value(syntax);
        }
Пример #27
0
 Result<Value> IValueProvider.Get(Syntax syntax)
     => InfixSyntax.Create(syntax.Left.Value, this, syntax.Right.Value, syntax);
Пример #28
0
        Result<Value> IValueProvider.Get(Syntax syntax)
        {
            if(syntax.Right == null)
                return SuffixSyntax.Create(syntax.Left.Value, this, syntax);

            NotImplementedMethod(syntax);
            return null;
        }
Пример #29
0
        Result<Value> IValueProvider.Get(Syntax syntax)
        {
            if(syntax.Left == null)
            {
                if(syntax.Right == null)
                    return new TerminalSyntax(this, syntax);

                return PrefixSyntax.Create(this, syntax.Right.Value, syntax);
            }

            NotImplementedMethod(syntax);
            return null;
        }
Пример #30
0
        internal Result<Syntax> GetBracketKernel(int level, Syntax parent)
        {
            Tracer.Assert(parent.Right == null);
            var leftParenthesis = TokenClass as LeftParenthesis;

            if(leftParenthesis == null)
                return new Result<Syntax>(this, IssueId.ExtraRightBracket.Create(parent.SourcePart));

            Tracer.Assert(Left == null);

            var levelDelta = leftParenthesis.Level - level;

            if(levelDelta == 0)
                return Right;

            if(levelDelta > 0)
                return new Result<Syntax>
                    (Right, IssueId.ExtraLeftBracket.Create(this.SourcePart));

            NotImplementedMethod(level, parent);
            return null;
        }