コード例 #1
0
        /// <summary>
        /// Compiles the Visual Basic code in assembly.
        /// </summary>
        protected void CompileVB(string code, out Microsoft.VisualBasic.VBCodeProvider provider)
        {
            System.CodeDom.Compiler.CompilerParameters parameters = new System.CodeDom.Compiler.CompilerParameters();
            parameters.GenerateInMemory      = true; //  'Assembly is created in memory
            parameters.TreatWarningsAsErrors = false;
            parameters.WarningLevel          = 4;

            string[] refs = { "System.dll", System.Reflection.Assembly.GetExecutingAssembly().Location };

            parameters.ReferencedAssemblies.AddRange(refs);
            provider = new Microsoft.VisualBasic.VBCodeProvider();

            string tomoSource = @"
Imports System
Imports Fractrace.TomoGeometry


Public Class VBTomoFormula 
Inherits TomoFormula

" + code + @"

End Class
";

            try
            {
                results = provider.CompileAssemblyFromSource(parameters, tomoSource);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                FormulaEditor.AddError(ex.ToString(), 0, 0);
                return;
            }

            if (results.Errors.Count != 0)
            {
                foreach (System.CodeDom.Compiler.CompilerError cerror in results.Errors)
                {
                    if (!cerror.IsWarning)
                    {
                        provider = null;
                        Console.WriteLine(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"");
                        FormulaEditor.AddError(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"", cerror.Line, cerror.Column);
                        return;
                    }
                }
            }
        }
コード例 #2
0
ファイル: Scenarion.cs プロジェクト: xeno-by/elf4b
		private void listDeclarations_DoubleClick(object sender, EventArgs e)
		{
			if (Scenario == null) return;
			if (listDeclarations.SelectedItems.Count != 1) return;

			var formulaDeclaration = listDeclarations.SelectedItems[0].Tag as FormulaDeclaration;
			if (formulaDeclaration == null) return;

			Application.DoEvents();

			var editor = new FormulaEditor();
			Func<IBranch> branchSelector = () => ScenarionBrowser.SelectBranch(Scenario, SelectedNode.Model, formulaDeclaration.Model);
			Func<IBranch> nodeSelector = () => ScenarionBrowser.SelectNode(Scenario, SelectedNode.Model);
			editor.elfEditor.Ctx = new TillerIntegrationContext(Scenario.Cast<ScenarioNode>().First().Model, formulaDeclaration.Model, branchSelector, nodeSelector);
			editor.elfEditor.EnterLockedAssignmentMode(formulaDeclaration.ElfCode);
			//editor.elfEditor.ElfCode = formulaDeclaration.ElfCode;

			Application.DoEvents();
			if (editor.ShowDialog(this) == DialogResult.OK)
			{
				var code = editor.elfEditor.ElfCode.ToCanonicalElf().RenderCanonicalElfAsPublicText(editor.elfEditor.Ctx);
				formulaDeclaration.HumanText = code;
				formulaDeclaration.ElfCode = editor.elfEditor.ElfCode;
				textFormulaView.Text = code;
			}
		}
コード例 #3
0
ファイル: Scenarion.cs プロジェクト: xeno-by/elf4b
		private void createFormulaDeclarationView(string type)
		{
			if (Scenario == null) return;

			var name = Interactor.Prompt("Укажите наименование формулы", "");
			if (name == null) return;
			Application.DoEvents();

			var formulaDeclaration = SelectedNode.AddFormulaDeclaration(type);
			formulaDeclaration.Name = name;

			var editor = new FormulaEditor();
			Func<IBranch> branchSelector = () => ScenarionBrowser.SelectBranch(Scenario, SelectedNode.Model, formulaDeclaration.Model);
			Func<IBranch> nodeSelector = () => ScenarionBrowser.SelectNode(Scenario, SelectedNode.Model);
			editor.elfEditor.Ctx = new TillerIntegrationContext(Scenario.Cast<ScenarioNode>().First().Model, formulaDeclaration.Model, branchSelector, nodeSelector);
			editor.elfEditor.EnterLockedAssignmentMode(formulaDeclaration.Model.VPath.ToElfIdentifier() + " = ?");
			Application.DoEvents();
			if (editor.ShowDialog(this) == DialogResult.OK)
			{
				var code = editor.elfEditor.ElfCode.ToCanonicalElf().RenderCanonicalElfAsPublicText(editor.elfEditor.Ctx);
				formulaDeclaration.HumanText = code;
				formulaDeclaration.ElfCode = editor.elfEditor.ElfCode;
			}
			else
			{
				formulaDeclaration.Model.Delete();
				return;
			}

			var item = listDeclarations.Items.Add(formulaDeclaration.Name);
			item.Tag = formulaDeclaration;
			formulaDeclaration.NameChanged += x => item.Text = x;
			item.SubItems.Add(formulaDeclaration.HumanType);
			item.Selected = true;
		}
コード例 #4
0
        /// <summary>
        /// Compiles the code in C# assembly.
        /// </summary>
        protected void CompileCS(string code, out Microsoft.CSharp.CSharpCodeProvider provider)
        {
            System.CodeDom.Compiler.CompilerParameters parameters = new System.CodeDom.Compiler.CompilerParameters();
            parameters.GenerateInMemory      = true; //  'Assembly is created in memory
            parameters.TreatWarningsAsErrors = false;
            parameters.WarningLevel          = 4;

            string[] refs = { "System.dll", System.Reflection.Assembly.GetExecutingAssembly().Location };

            parameters.ReferencedAssemblies.AddRange(refs);
            provider = new Microsoft.CSharp.CSharpCodeProvider();

            List <Tuple <string, string, string> > interfaceVariableDefinition = ParseInterfaceVariables(code);

            StringBuilder initialisiationCode = new StringBuilder();

            foreach (Tuple <string, string, string> parameterInfo in interfaceVariableDefinition)
            {
                switch (parameterInfo.Item2)
                {
                case "double":
                    if (parameterInfo.Item3 != "")
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=GetOrSetDouble(\"" + parameterInfo.Item1 + "\"," + parameterInfo.Item3 + ");");
                    }
                    else
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=GetOrSetDouble(\"" + parameterInfo.Item1 + "\");");
                    }
                    break;

                case "bool":
                    if (parameterInfo.Item3 != "")
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=GetOrSetBool(\"" + parameterInfo.Item1 + "\"," + parameterInfo.Item3 + ");");
                    }
                    else
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=GetOrSetBool(\"" + parameterInfo.Item1 + "\");");
                    }
                    break;

                case "int":
                    if (parameterInfo.Item3 != "")
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=(int)GetOrSetDouble(\"" + parameterInfo.Item1 + "\"," + parameterInfo.Item3 + ");");
                    }
                    else
                    {
                        initialisiationCode.AppendLine(parameterInfo.Item1 + "=(int)GetOrSetDouble(\"" + parameterInfo.Item1 + "\");");
                    }
                    break;
                }
            }

            string tomoSource = @"
using System;
using Fractrace;
using Fractrace.TomoGeometry;
using Fractrace.Geometry;

public class CSTomoFormula : " + GuessFormulaClass(code) + @" {

    " + code + @"
public CSTomoFormula() {
" + initialisiationCode.ToString()
                                +
                                @"
    }

}
";

            try
            {
                results = provider.CompileAssemblyFromSource(parameters, tomoSource);
                RemoveUnusedParameters(tomoSource);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                FormulaEditor.AddError(ex.ToString(), 0, 0);
                return;
            }
            if (results.Errors.Count != 0)
            {
                foreach (System.CodeDom.Compiler.CompilerError cerror in results.Errors)
                {
                    if (!cerror.IsWarning)
                    {
                        provider = null;
                        Console.WriteLine(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"");
                        FormulaEditor.AddError(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"", cerror.Line, cerror.Column);
                        return;
                    }
                }
            }
        }