Ejemplo n.º 1
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());
        }
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            macroBinding.BindMultivectorPartToVariables("result", OutputGrade);

            macroBinding.BindMultivectorPartToVariables("v", InputGrade1);
            macroBinding.BindMultivectorPartToVariables("mv", InputGrade2);
        }
Ejemplo n.º 3
0
        private GMacMacroCodeComposer InitMacroCodeGenerator(GMacMacroBinding macroBinding)
        {
            var macroGenerator = CreateMacroCodeGenerator(macroBinding.BaseMacro);

            macroGenerator.ActionSetMacroParametersBindings =
                macroGenBinding =>
            {
                foreach (var paramBinding in macroBinding.Bindings)
                {
                    if (paramBinding.IsVariable)
                    {
                        macroGenBinding.BindToVariables(
                            paramBinding.ValueAccess,
                            paramBinding.TestValueExpr
                            );
                    }
                    else
                    {
                        macroGenBinding.BindScalarToConstant(
                            paramBinding.ValueAccess,
                            paramBinding.ConstantExpr
                            );
                    }
                }
            };

            macroGenerator.ActionSetTargetVariablesNames =
                SetTargetNaming;

            return(macroGenerator);
        }
Ejemplo n.º 4
0
        private void GenerateMacroCode(AstMacro macro)
        {
            var macroBinding = GMacMacroBinding.Create(macro);

            InitializeFullMacroBinding(macroBinding);

            GenerateMacroCode(macroBinding);
        }
Ejemplo n.º 5
0
        public SingleMacroGen(GMacMacroBinding macroBinding)
            : base(macroBinding.BaseMacro.Root, GMacLanguageServer.CSharp4())
        {
            MacroBinding = macroBinding;

            MacroGenDefaults = new GMacMacroCodeComposerDefaults(this);

            SelectedSymbols.Add(macroBinding.BaseMacro);
        }
Ejemplo n.º 6
0
        private GMacMacroCodeComposer InitMacroCodeGenerator(GMacMacroBinding macroBinding)
        {
            var macroGenerator =
                new GMacMacroCodeComposer(MacroGenDefaults, macroBinding.BaseMacro)
            {
                ActionSetMacroParametersBindings = InitializeFullMacroBinding,
                ActionSetTargetVariablesNames    = InitializeFullTargetNaming
            };

            return(macroGenerator);
        }
Ejemplo n.º 7
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();
        }
Ejemplo n.º 8
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();
        }
Ejemplo n.º 9
0
        private void GenerateMacroCode(GMacMacroBinding macroBinding)
        {
            //GMacCodeBlock codeBlock = null;

            ActiveFileTextComposer.AppendAtNewLine("public static ");
            GenerateTypeName(macroBinding.BaseMacro.OutputType);
            ActiveFileTextComposer.Append(" ");
            ActiveFileTextComposer.Append(macroBinding.BaseMacro.Name);
            ActiveFileTextComposer.Append("(");

            GenerateMacroInputsCode(macroBinding.BaseMacro);

            ActiveFileTextComposer.AppendLine(")");

            ActiveFileTextComposer.AppendLineAtNewLine("{");
            ActiveFileTextComposer.IncreaseIndentation();

            if (macroBinding.BaseMacro.OutputType.IsValidScalarType)
            {
                ActiveFileTextComposer.AppendAtNewLine(GMacLanguage.ScalarTypeName);
                ActiveFileTextComposer.AppendLine(" result;");
            }
            else
            {
                ActiveFileTextComposer.AppendAtNewLine("var result = ");

                GenerateTypeDefaultValue(macroBinding.BaseMacro.OutputType);

                ActiveFileTextComposer.AppendLine(";");
            }

            ActiveFileTextComposer.AppendLine();

            if (MacroGenDefaults.AllowGenerateMacroCode)
            {
                var macroGenerator = InitMacroCodeGenerator(macroBinding);

                ActiveFileTextComposer.AppendLineAtNewLine(
                    macroGenerator.Generate()
                    );

                //codeBlock = macroGenerator.CodeBlock;
            }

            ActiveFileTextComposer.AppendLineAtNewLine("return result;");

            ActiveFileTextComposer.DecreaseIndentation();
            ActiveFileTextComposer.AppendLineAtNewLine("}");
            ActiveFileTextComposer.AppendLine();

            //return codeBlock;
        }
Ejemplo n.º 10
0
        public static void DefaultActionSetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            var lowLevelParams =
                macroBinding
                .BaseMacro
                .Parameters
                .SelectMany(p => p.DatastoreValueAccess.ExpandAll());

            foreach (var macroParam in lowLevelParams)
            {
                macroBinding.BindToVariables(macroParam);
            }
        }
Ejemplo n.º 11
0
        private void InitializeFullMacroBinding(GMacMacroBinding macroBinding)
        {
            macroBinding.Clear();

            var valueAccessList =
                macroBinding
                .BaseMacro
                .Parameters
                .SelectMany(paramInfo => paramInfo.DatastoreValueAccess.ExpandAll());

            foreach (var valueAccess in valueAccessList)
            {
                macroBinding.BindToVariables(valueAccess);
            }
        }
Ejemplo n.º 12
0
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            var outputValueAccess = macroBinding.BaseMacro.OutputParameterValueAccess;

            if (outputValueAccess.GMacType.IsValidMultivectorType)
            {
                macroBinding.BindMultivectorPartToVariables(outputValueAccess, _outGrade);
            }
            else
            {
                macroBinding.BindToVariables(outputValueAccess);
            }

            macroBinding.BindMultivectorPartToVariables("mv", _inGrade);
        }
Ejemplo n.º 13
0
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            var outputParam = macroBinding.BaseMacro.OutputParameterValueAccess;

            if (outputParam.GMacType.IsValidMultivectorType)
            {
                macroBinding.BindMultivectorPartToVariables(outputParam, OutputGrade);
            }
            else
            {
                macroBinding.BindToVariables(outputParam);
            }

            macroBinding.BindMultivectorPartToVariables("mv1", InputGrade1);
            macroBinding.BindMultivectorPartToVariables("mv2", InputGrade2);
        }
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            macroBinding.BindMultivectorPartToVariables("result", _outGrade);

            for (var gradeIdx = 0; gradeIdx < CurrentFrame.VSpaceDimension; gradeIdx++)
            {
                if (gradeIdx < _outGrade)
                {
                    macroBinding.BindToVariables("v" + gradeIdx + ".@G1@");
                }
                else
                {
                    macroBinding.BindScalarToConstant("v" + gradeIdx + ".#E0#", 1);
                }
            }
        }
Ejemplo n.º 15
0
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            macroBinding.BindMultivectorPartToVariables("result", InputGrade);
            macroBinding.BindMultivectorPartToVariables("mv", InputGrade);

            for (var i = 0; i < CurrentFrame.VSpaceDimension; i++)
            {
                var id = CurrentFrame.BasisVectorId(i);

                for (var j = 0; j < CurrentFrame.VSpaceDimension; j++)
                {
                    var valueAccessName = "om.ImageV" + (j + 1) + ".#E" + id + "#";

                    macroBinding.BindToVariables(valueAccessName);
                }
            }
        }
Ejemplo n.º 16
0
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            macroBinding.BindMultivectorPartToVariables("B", InputGrade);

            var idx = 1;

            foreach (var basisVectorId in InputId.GetBasicPatterns())
            {
                var valueAccessName = "inputVectors.f" + idx + ".#E" + basisVectorId + "#";

                macroBinding.BindScalarToConstant(valueAccessName, 1);

                valueAccessName = "result.f" + idx + ".@G1@";

                macroBinding.BindToVariables(valueAccessName);

                idx++;
            }
        }
Ejemplo n.º 17
0
        private bool UpdateMacroBinding()
        {
            var result = true;

            textBoxDisplay.Text = String.Empty;

            MacroBinding =
                GMacMacroBinding.Create(
                    SelectedMacro
                    );

            var paramText =
                textBoxParameters
                .Text
                .SplitLines()
                .Select(line => line.Trim())
                .Where(line => String.IsNullOrEmpty(line) == false);

            foreach (var line in paramText)
            {
                try
                {
                    AddMacroParameterBinding(line);
                }
                catch (Exception e)
                {
                    textBoxDisplay.Text +=
                        new StringBuilder()
                        .AppendLine("Error parsing macro parameter binding at:")
                        .Append("    ").AppendLine(line)
                        .AppendLine("Error Message: ")
                        .Append("    ").AppendLine(e.Message)
                        .AppendLine()
                        .ToString();

                    result = false;
                }
            }

            return(result);
        }
Ejemplo n.º 18
0
 protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
 {
     macroBinding.BindToVariables("result");
     macroBinding.BindToTreePattern("mv1", ClassData.ClassBinding);
     macroBinding.BindToTreePattern("mv2", CalcClassData.ClassBinding);
 }
        protected override void SetMacroParametersBindings(GMacMacroBinding macroBinding)
        {
            macroBinding.BindToVariables(macroBinding.BaseMacro.OutputParameterValueAccess);

            macroBinding.BindMultivectorPartToVariables("mv", _inGrade);
        }
Ejemplo n.º 20
0
 protected abstract void SetMacroParametersBindings(GMacMacroBinding macroBinding);
Ejemplo n.º 21
0
        public MacroBindingToGraphViz(GMacMacroBinding macroBinding, GMacCodeBlock codeBlock)
        {
            MacroBinding = macroBinding;

            OptimizedCodeBlock = codeBlock;
        }
Ejemplo n.º 22
0
        private void GenerateMacro()
        {
            listBoxGenerationStage.Items.Clear();

            textBoxDisplay.Text = String.Empty;

            Graph = null;

            if (UpdateMacroBindingTextData() == false)
            {
                return;
            }

            GMacSystemUtils.ResetProgress();

            MacroBinding = GMacMacroBinding.Create(SelectedMacro);

            MacroCodeGenerator = new SingleMacroGen(MacroBinding)
            {
                MacroGenDefaults = { AllowGenerateMacroCode = true }
            };

            foreach (var bindingData in BindingTextData.Bindings)
            {
                if (bindingData.IsConstantBinding)
                {
                    MacroBinding.BindScalarToConstant(
                        bindingData.ValueAccessName,
                        bindingData.ConstantValueText
                        );

                    continue;
                }

                var testValueExpr =
                    bindingData.HasTestValue
                    ? bindingData.TestValueText.ToExpr(SymbolicUtils.Cas)
                    : null;

                MacroBinding.BindToVariables(bindingData.ValueAccessName, testValueExpr);

                if (bindingData.HasTargetVariableName)
                {
                    MacroCodeGenerator
                    .TargetVariablesNamesDictionary.Add(
                        bindingData.ValueAccessName,
                        bindingData.TargetVariableName
                        );
                }
            }

            GenerateMacro_DslCode();

            GenerateMacro_ParsedBody();

            GenerateMacro_CompiledBody();

            GenerateMacro_OptimizedBody();

            GenerateMacro_RawBodyCallCode();

            GenerateMacro_ParsedBodyCallCode();

            GenerateMacro_CompiledBodyCallCode();

            GenerateMacro_OptimizedBodyCallCode();

            GenerateMacro_SampleTargetCode();

            ProgressHistory =
                MacroCodeGenerator
                .Progress
                .History
                .ReadHistory()
                .ToDictionary(item => item.ProgressId);

            foreach (var item in ProgressHistory)
            {
                listBoxGenerationStage.Items.Add(item.Value.FullTitle);
            }

            Graph = MacroCodeGenerator.Graph;
        }