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); }
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); }
private void GenerateMacroCode(AstMacro macro) { var macroBinding = GMacMacroBinding.Create(macro); InitializeFullMacroBinding(macroBinding); GenerateMacroCode(macroBinding); }
public SingleMacroGen(GMacMacroBinding macroBinding) : base(macroBinding.BaseMacro.Root, GMacLanguageServer.CSharp4()) { MacroBinding = macroBinding; MacroGenDefaults = new GMacMacroCodeComposerDefaults(this); SelectedSymbols.Add(macroBinding.BaseMacro); }
private GMacMacroCodeComposer InitMacroCodeGenerator(GMacMacroBinding macroBinding) { var macroGenerator = new GMacMacroCodeComposer(MacroGenDefaults, macroBinding.BaseMacro) { ActionSetMacroParametersBindings = InitializeFullMacroBinding, ActionSetTargetVariablesNames = InitializeFullTargetNaming }; return(macroGenerator); }
public GMacMacroCodeComposer(GMacMacroCodeComposerDefaults codeGenDefaults, AstMacro baseMacro = null) : base(codeGenDefaults.LibraryComposer) { SyntaxList = new SteSyntaxElementsList(); MacroBinding = baseMacro.IsNullOrInvalid() ? null : GMacMacroBinding.Create(baseMacro); UsedDefaults = codeGenDefaults.Duplicate(); SetDefaults(); }
/// <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(); }
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; }
public static void DefaultActionSetMacroParametersBindings(GMacMacroBinding macroBinding) { var lowLevelParams = macroBinding .BaseMacro .Parameters .SelectMany(p => p.DatastoreValueAccess.ExpandAll()); foreach (var macroParam in lowLevelParams) { macroBinding.BindToVariables(macroParam); } }
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); } }
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); }
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); } } }
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); } } }
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++; } }
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); }
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); }
protected abstract void SetMacroParametersBindings(GMacMacroBinding macroBinding);
public MacroBindingToGraphViz(GMacMacroBinding macroBinding, GMacCodeBlock codeBlock) { MacroBinding = macroBinding; OptimizedCodeBlock = codeBlock; }
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; }