Exemplo n.º 1
0
        public AstDatastoreValueAccess GetMacroParameterValueAccess(AstMacro macroInfo, string codeText)
        {
            if (InitializeCompiler(macroInfo.AssociatedMacro.ChildScope, "Macro Parameter Value Access", codeText) == false)
            {
                return(null);
            }

            var progressTitle = CompileProgressTitle("Macro Parameter Value Access");

            try
            {
                RootParseNode = RootParseNode.ChildNodes[0];

                var valueAccess =
                    GMacValueAccessGenerator.Translate_LValue_MacroParameter(Context, RootParseNode, macroInfo.AssociatedMacro);


                this.ReportNormal(progressTitle, valueAccess.GetName(), ProgressEventArgsResult.Success);

                return(new AstDatastoreValueAccess(valueAccess));
            }
            catch (Exception e)
            {
                this.ReportError(progressTitle, e);

                return(null);
            }
        }
Exemplo n.º 2
0
        private void AddCalledMacros(AstMacro macro)
        {
            var macroDep = _dependencyGraph[macro.AccessName];

            if (macroDep.UsedCount == 0)
            {
                return;
            }

            foreach (var calledMacro in macroDep.UsedItems)
            {
                if (_dict.ContainsKey(calledMacro.AccessName) == false)
                {
                    _dict.Add(calledMacro.AccessName, calledMacro.AccessName);

                    Graph
                    .AddNode(calledMacro.AccessName)
                    .SetFillColor(Color.White.ToDotRgbColor())
                    .SetLabel(
                        Graph.Table(
                            "Macro",
                            calledMacro.AccessName
                            )
                        );
                }

                Graph.AddEdge(calledMacro.AccessName, macro.AccessName);

                AddCalledMacros(calledMacro);
            }
        }
Exemplo n.º 3
0
 public static GMacMacroTreeBinding Create(AstMacro baseMacroInfo, GMacBindOutputToConstantBehavior outputToConstAction = GMacBindOutputToConstantBehavior.Prevent)
 {
     return(new GMacMacroTreeBinding(baseMacroInfo)
     {
         BindOutputToConstantAction = outputToConstAction
     });
 }
Exemplo n.º 4
0
 /// <summary>
 /// Create an empty macro parameters list binding pattern
 /// </summary>
 /// <param name="baseMacro"></param>
 /// <param name="outputToConstAction"></param>
 /// <returns></returns>
 public static GMacMacroBinding Create(AstMacro baseMacro, GMacBindOutputToConstantBehavior outputToConstAction = GMacBindOutputToConstantBehavior.BindToVariable)
 {
     return(new GMacMacroBinding(baseMacro)
     {
         BindOutputToConstantBehavior = outputToConstAction
     });
 }
Exemplo n.º 5
0
        internal DpDualMethodsFileGenerator(BladesLibrary libGen, string opName)
            : base(libGen)
        {
            OperatorName = opName;

            EgpDualMacro = CurrentFrame.Macro(DefaultMacro.EuclideanBinary.GeometricProductDual);
        }
Exemplo n.º 6
0
        public static DotGraph ToLowLevelGraphViz(this AstMacro macro)
        {
            var random = new Random();

            var macroBinding = GMacMacroBinding.Create(macro);

            var lowLevelParameters = macro.InputParameters.SelectMany(p => p.DatastoreValueAccess.ExpandAll());

            foreach (var llp in lowLevelParameters)
            {
                if (random.Next(1, 10) > -1)
                {
                    macroBinding.BindToVariables(llp);
                }

                else
                {
                    macroBinding.BindScalarToConstant(llp, 1);
                }
            }

            lowLevelParameters = macro.OutputParameter.DatastoreValueAccess.ExpandAll();
            foreach (var llp in lowLevelParameters)
            {
                macroBinding.BindToVariables(llp);
            }

            var codeBlock = macroBinding.CreateOptimizedCodeBlock();

            //var visitor = new MacroBindingToGraphViz(macroBinding, codeBlock);
            var visitor = new GMacCodeBlockToGraphViz(codeBlock);

            return(visitor.ToGraphViz());
        }
        //private GMacInfoMacro AddEuclideanDualGMacMacro()
        //{
        //    var codeText =
        //        Templates["edual_macro"].GenerateUsing(CurrentFrameName);

        //    var gmacMacro =
        //        _tempSymbolsCompiler.CompileMacro(
        //            codeText,
        //            _currentFrame.AssociatedFrame.ChildScope
        //            );

        //    return new GMacInfoMacro(gmacMacro);
        //}

        private void GenerateEuclideanDualFunction(int inGrade, AstMacro macroInfo)
        {
            var macroGenerator = LibraryComposer.CreateMacroCodeGenerator(macroInfo);

            var outGrade = CurrentFrame.VSpaceDimension - inGrade;

            macroGenerator.ActionSetMacroParametersBindings =
                macroBinding =>
            {
                macroBinding.BindMultivectorPartToVariables("result", outGrade);
                macroBinding.BindMultivectorPartToVariables("mv", inGrade);
            };

            macroGenerator.ActionSetTargetVariablesNames =
                targetNaming =>
            {
                BladesLibraryGenerator.SetBasisBladeToArrayNaming(targetNaming, "result", outGrade, "c");
                BladesLibraryGenerator.SetBasisBladeToArrayNaming(targetNaming, "mv", inGrade, "coefs");
                BladesLibraryGenerator.SetTargetTempVariablesNames(targetNaming);
            };

            //Generate code from macro binding
            var computationsText = macroGenerator.Generate();

            TextComposer.Append(
                Templates["edual"],
                "double", GMacLanguage.ScalarTypeName,
                "grade", inGrade,
                "num", CurrentFrame.KvSpaceDimension(inGrade),
                "computations", computationsText
                );
        }
Exemplo n.º 8
0
        private void AddInputsCluster(AstMacro macro)
        {
            var inputsGraph = Graph;

            //    Graph
            //    .AddSubGraph("Inputs")
            //    .SetRank(DotRankType.Min);
            ////.SetLabel("Input Parameters".Bold());

            foreach (var inParam in macro.InputParameters)
            {
                var node = inputsGraph
                           .AddNode(inParam.Name)
                           .SetLabel(
                    Graph.Table(
                        "Input",
                        Graph.SimpleTable(inParam.GMacTypeSignature, "Input"),
                        inParam.Name
                        )
                    );

                inputsGraph
                .AddEdge(
                    macro.AccessName.ToNodeRef(DotCompass.Center),
                    node.ToNodeRef(DotCompass.Center)
                    )
                .SetColor(Color.Black.ToDotRgbColor());
            }
        }
Exemplo n.º 9
0
        public static DotGraph ToGraphViz(this AstMacro macro)
        {
            var visitor = new MacroToGraphViz();

            macro.AcceptVisitor(visitor);

            return(visitor.Graph);
        }
Exemplo n.º 10
0
        public static DotGraph ToDependenciesGraphViz(this AstMacro macro)
        {
            var visitor = new MacroDependenciesToGraphViz();

            visitor.Visit(macro);

            return(visitor.Graph);
        }
Exemplo n.º 11
0
        private void GenerateMacroCode(AstMacro macro)
        {
            var macroBinding = GMacMacroBinding.Create(macro);

            InitializeFullMacroBinding(macroBinding);

            GenerateMacroCode(macroBinding);
        }
Exemplo n.º 12
0
        public GMacMacroCodeComposer(GMacMacroCodeComposerDefaults codeGenDefaults, AstMacro baseMacro = null)
            : base(codeGenDefaults.LibraryComposer)
        {
            SyntaxList = new SteSyntaxElementsList();

            MacroBinding = baseMacro.IsNullOrInvalid() ? null : GMacMacroBinding.Create(baseMacro);

            UsedDefaults = codeGenDefaults.Duplicate();

            SetDefaults();
        }
Exemplo n.º 13
0
        public TreeNode Visit(AstMacro item)
        {
            var node = new TreeNode(item.Name)
            {
                Tag              = item,
                ImageKey         = @"Macro64.png",
                SelectedImageKey = @"Macro64.png"
            };

            return(node);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Used to replace the base macro by another one. This sets the defaults of the generator and clears
        /// the internal code composer
        /// </summary>
        /// <param name="baseMacro"></param>
        public void SetBaseMacro(AstMacro baseMacro)
        {
            SyntaxList.Clear();

            CodeBlock = null;

            TargetVariablesNaming = null;

            MacroBinding = GMacMacroBinding.Create(baseMacro);

            SetDefaults();
        }
Exemplo n.º 15
0
        internal FormMacroExplorer(GMacMacro macro)
        {
            InitializeComponent();

            SelectedMacro = new AstMacro(macro);

            AstDescription = new GMacAstDescription();

            textBoxMacroName.Text = macro.SymbolAccessName;

            ResetMacroParameters();
        }
Exemplo n.º 16
0
        public string Visit(AstMacro item)
        {
            var composer = CreateColumnsComposer();

            composer
            .AppendToColumns("Macro Name:", item.AccessName)
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Output Parameter:",
                item.OutputParameterName + " : " + item.OutputParameter.GMacTypeSignature
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Input Parameters:",
                item
                    .InputParameters
                    .Select(t => t.AccessName + " : " + t.GMacTypeSignature)
                    .Concatenate(Environment.NewLine)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Macros calling this macro:",
                _macroDepGraph
                .GetAllUserItems(item)
                .Select(d => d.BaseItem.AccessName)
                .Concatenate(Environment.NewLine)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Macros called by this macro:",
                _macroDepGraph
                .GetAllUsedItems(item)
                .Select(d => d.BaseItem.AccessName)
                .Concatenate(Environment.NewLine)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Main Command Block:",
                Visit(item.CommandBlock)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Compiled Command Block:",
                Visit(item.CompiledCommandBlock)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Optimized Command Block:",
                Visit(item.OptimizedCommandBlock)
                );

            return composer.GenerateText();
        }
        private void GenerateSelfDpGradeFunction(int inGrade, AstMacro selfEgpMacroInfo)
        {
            var macroGenerator = LibraryComposer.CreateMacroCodeGenerator(selfEgpMacroInfo);

            var outGradesList =
                CurrentFrame
                .GradesOfEGp(inGrade, inGrade)
                .Where(grade => grade > 0)
                .OrderByDescending(g => g);

            macroGenerator.ActionSetMacroParametersBindings =
                macroBinding =>
            {
                foreach (var outGrade in outGradesList)
                {
                    macroBinding.BindMultivectorPartToVariables("result", outGrade);
                }

                macroBinding.BindMultivectorPartToVariables("mv", inGrade);
            };

            macroGenerator.ActionSetTargetVariablesNames =
                targetNaming =>
            {
                foreach (var outGrade in outGradesList)
                {
                    targetNaming.SetMultivectorParameters("result", outGrade, id => "c");
                }

                BladesLibraryGenerator.SetBasisBladeToArrayNaming(targetNaming, "mv", inGrade, "coefs");

                BladesLibraryGenerator.SetTargetTempVariablesNames(targetNaming);
            };

            macroGenerator.ActionBeforeGenerateSingleComputation =
                TestSelfDpGradeFunctionComputationCondition;

            macroGenerator.ActionAfterGenerateSingleComputation =
                AddSelfDpGradeFunctionComputationCondition;

            macroGenerator.MacroBinding.FixOutputComputationsOrder = true;

            //Generate code from macro binding
            var computationsText = macroGenerator.Generate();

            TextComposer.Append(
                Templates["self_dp_grade"],
                "grade", inGrade,
                "double", GMacLanguage.ScalarTypeName,
                "computations", computationsText
                );
        }
Exemplo n.º 18
0
        private void GenerateFactorMethod(int inGrade, int inId, AstMacro gmacMacroInfo)
        {
            CodeFilesComposer.DownFolder("Factor");

            CodeFilesComposer.InitalizeFile("Factor" + inId + ".cs");

            var fileGen = new FactorMethodFileGenerator(this, inGrade, inId, gmacMacroInfo);

            fileGen.Generate();

            CodeFilesComposer.UnselectActiveFile();

            CodeFilesComposer.UpFolder();
        }
Exemplo n.º 19
0
        private void AddOutputsCluster(AstMacro macro)
        {
            var outputsGraph =
                Graph
                .AddSubGraph("Outputs")
                .SetRank(DotRankType.Max);

            outputsGraph
            .AddNode(macro.OutputParameter.Name)
            .SetLabel(
                Graph.Table(
                    "Output",
                    Graph.SimpleTable(macro.OutputParameter.GMacTypeSignature, "Output"),
                    macro.OutputParameter.Name
                    )
                );
        }
Exemplo n.º 20
0
        private void AddStepsCluster(AstMacro macro)
        {
            StepsCluster =
                Graph
                .AddSubGraph("Processing");
            //.SetLabel("Optimized Processing Steps".Bold());

            var commands =
                macro
                .OptimizedCommandBlock
                .Commands
                .Where(command => command.IsValidCommandLet);

            foreach (var command in commands)
            {
                command.AcceptVisitor(this);
            }
        }
Exemplo n.º 21
0
        public AstMacro CompileMacro(string codeText)
        {
            if (InitializeCompiler(codeText, GMacSourceParser.ParseMacro, RefResContext) == false)
            {
                this.ReportNormal(
                    "Initializing Compile Temp Macro",
                    codeText,
                    ProgressEventArgsResult.Failure
                    );

                return(null);
            }

            this.ReportNormal(
                "Initializing Compile Temp Macro",
                codeText,
                ProgressEventArgsResult.Success
                );

            try
            {
                var compiledSymbol =
                    new AstMacro(GMacMacroGenerator.Translate(Context, RootParseNode));

                CompiledMacros.Add(compiledSymbol.AccessName, compiledSymbol);

                this.ReportNormal(
                    "Compiling Temp Macro",
                    compiledSymbol.AccessName,
                    ProgressEventArgsResult.Success
                    );

                return(compiledSymbol);
            }
            catch (Exception e)
            {
                this.ReportError("Error Compiling Temp Macro", e);

                return(null);
            }
        }
Exemplo n.º 22
0
        private void GenerateMacroInputsCode(AstMacro macroInfo)
        {
            var flag = false;

            foreach (var paramInfo in macroInfo.InputParameters)
            {
                if (flag)
                {
                    ActiveFileTextComposer.Append(", ");
                }
                else
                {
                    flag = true;
                }

                GenerateTypeName(paramInfo.GMacType);

                ActiveFileTextComposer.Append(" ");

                ActiveFileTextComposer.Append(paramInfo.Name);
            }
        }
Exemplo n.º 23
0
        public void Visit(AstMacro macro)
        {
            //Graph = AstVisitorDotGraph.Create();

            _nodesStack.Clear();

            Graph
            .SetRankDir(DotRankDirection.LeftToRight);

            Graph
            .AddNode(macro.AccessName)
            .SetLabel(
                Graph.Table("Macro", macro.AccessName)
                );


            AddInputsCluster(macro);

            AddOutputsCluster(macro);

            AddStepsCluster(macro);
        }
Exemplo n.º 24
0
        ///// <summary>
        ///// Find a structure data member given a text reference starting at the current scope information
        ///// </summary>
        ///// <param name="symbolName"></param>
        ///// <returns></returns>
        //public GMacInfoStructureDataMember DataMember(string symbolName)
        //{
        //    GMacInfoStructureDataMember symbolInfo;

        //    LanguageSymbol symbol;
        //    if (_symbolsCache.TryGetValue(symbolName, out symbol))
        //    {
        //        symbolInfo = new GMacInfoStructureDataMember(symbol as SymbolStructureDataMember);
        //    }
        //    else
        //    {
        //        symbolInfo = _expressionCompiler.DataMember(symbolName);

        //        AddToSymbolsCache(symbolName, symbolInfo.AssociatedDataMember);
        //    }

        //    _requests.Add(
        //        new InterpreterRequest(InterpreterRequestType.GetSymbol, symbolName)
        //        { IsSuccess = symbolInfo.IsReady }
        //        );

        //    return symbolInfo;
        //}

        /// <summary>
        /// Find a macro given a text reference starting at the current scope information
        /// </summary>
        /// <param name="symbolName"></param>
        /// <returns></returns>
        public AstMacro Macro(string symbolName)
        {
            symbolName = symbolName.Trim();

            AstMacro symbolInfo;

            LanguageSymbol symbol;

            if (_symbolsCache.TryGetValue(symbolName, out symbol))
            {
                symbolInfo = new AstMacro(symbol as GMacMacro);
            }
            else
            {
                symbolInfo = _expressionCompiler.GetMacro(symbolName);

                AddToSymbolsCache(symbolName, symbolInfo.AssociatedMacro);
            }

            this.ReportNormal("Request Macro " + symbolName.DoubleQuote(), symbolInfo.IsNotNullAndValid());

            return(symbolInfo);
        }
Exemplo n.º 25
0
        public void Visit(AstMacro macro)
        {
            _dependencyGraph = macro.Root.GetMacroDependencies();

            Graph.SetRankDir(DotRankDirection.LeftToRight);

            Graph
            .AddNode(macro.AccessName)
            .SetFillColor(Color.GreenYellow.ToDotRgbColor())
            .SetLabel(
                Graph.Table(
                    "Macro",
                    macro.AccessName
                    )
                );

            _dict.Clear();

            AddCallerMacros(macro);

            _dict.Clear();

            AddCalledMacros(macro);
        }
 internal VectorsOpMethodsFileGenerator(BladesLibrary libGen, AstMacro macroInfo)
     : base(libGen, macroInfo)
 {
 }
Exemplo n.º 27
0
 public bool ContainsScope(AstMacro scopeSymbol)
 {
     return(ContainsScope(scopeSymbol.AssociatedMacro.ChildScope));
 }
Exemplo n.º 28
0
 public GMacRefResContextInfo(AstMacro scopeSymbol)
 {
     MainScope = scopeSymbol.AssociatedMacro.ChildScope;
 }
Exemplo n.º 29
0
 public GMacRefResContextInfo CloseScope(AstMacro scopeSymbol)
 {
     return(CloseScope(scopeSymbol.AssociatedMacro.ChildScope));
 }
Exemplo n.º 30
0
 internal GMacCodeBlock(AstMacro baseMacro)
 {
     BaseMacro = baseMacro;
 }